概念
nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;
在高连接并发的情况下,Nginx是Apache服务器不错的替代品。
对于前后端分离来说更是比较优越到选择,不需要去知道服务器端放在哪里,也不用去关心还不用担心跨域舒服
代理
代理有点像中介,我想去买房,但是房源在哪里?找起来很费事其中还有各种手续要办。这个时候我去找中介,帮我去完成找房源办理各种手续,我只需要等待结果,这个就是代理到流程。
在nginx 中代理流程大概也是这样,对于前端用到最多到是HTTP服务代理

代理太笼统,具体还分为 正向代理和反向代理
正向代理
正向代理好比媒人,由于种种原因,你不能到对方直接获取消息但是你知道目标是谁,你就和媒人沟通协商,用他到身份去进行沟通,最终获得自己消息,这个就是正向代理
正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。
vpn 就这比较典型的代表,我们不能访问国外的一些网站,就需要代理来实现,这个代理一般就是正向代理,nginx也可以实现正向代理,只是在多数情况我们使用的是反向代理
方向代理(负载均衡)
反向代理和正向代理的区别就是:正向代理代理客户端,反向代理代理服务器。
反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。

在前端开发中用的最多的场景
静态服务器
反向代理,负载均衡。
缓存服务
nginx 反向代理配置
了解基本概念试一下
设定一个小目标:在浏览器输入 www.muzi.com 直接跳转到 本机地址 127.0.0.1:8880
说明一下这个小目标需求逻辑:通过nginx 设置反向代理,当浏览器输入 www.muzi.com,把这个请求地址指向 本机项目地址
找到你的nginx配置文件nginx.conf,打开,找到如下代码,我们只修改一部分就可以,其他的保持默认状态即可
server {
#server_name localhost;
server_name www.muzi.com;
location /{
proxy_pass http://127.0.0.1:8880
}
}
启动nginx 不同系统不同的启动方法,发现www.muzi.com 指向了,本地服务。哈哈。好玩吧
上一张网上总结的比较好的图。说了nginx.conf 配置的图,非常形象

nginx.conf 配置总的就是这么三大块。一个是定义全局变量的区域main;2是event 模块; 3是http服务器,二http服务区域里面的server 可以理解为虚拟服务器(主机设置)一个nginx可以代理很多个就靠这server去设置,
篇幅和能力限制直接上配置的好的加上注解
nginx.conf
#指定启动多少进程来处理请求,一般情况下设置成CPU的核数,如果开启了ssl和gzip更应该设置成与逻辑CPU数量一样甚至为2倍,可以减少I/O操作
worker_processes 1;
events {
#每一个worker进程能并发处理(发起)的最大连接数
worker_connections 1024;
}
http {
#主模块指令,实现对配置文件所包含的文件的设定
include mime.types;
#HTTP核心模块指令,这里设定默认类型为二进制流,也就是当文件类型未定义时使用这种方式
default_type application/octet-stream;
#开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,减少用户空间到内核空间的上下文切换。对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。
sendfile on;
#长连接超时时间,单位是秒,这个参数很敏感,涉及浏览器的种类、后端服务器的超时设置、操作系统的设置
keepalive_timeout 65;
#虚拟主机的配置,可以是多个在http模块里面就可以
server {
#监听端口
listen 8888;
#服务器名
server_name localhost;
#定义服务器的默认网站根目录位置。如果locationURL匹配的是子目录或文件,root没什么作用,一般放在server指令里面或/下
root F:/AXSVN/S102/html5/statichtml;
client_header_timeout 3m;
#定义负载节点池
upstream localhost{
#每个请求按访问IP的hash结果分配,这样来自同一个IP的固定访问一个后端服务器,主要解决动态网站session共享的问题。
ip_hash;
server localhost:8888;
#server localhost:9999;
}
#基于一个指令设置URI
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|JPG|GIF|PNG|JPEG|BMP|SWF|less|eot|jsx|svg|mp4|mp3|ttf|woff|woff2|otf|html|htm|HTM|HTML)$ {
expires 1m;
}
location ~ .*\.(js|css)$ {
expires 1m;
}
location /{
//代理的地址
#当后端Web服务器上也配置有多个虚拟主机时,需要用该Header来区分反向代理哪个主机名
proxy_set_header Host $host;
#如果后端Web服务器上的程序需要获取用户IP,从该Header头获取
proxy_set_header X-Forwarded-For $remote_addr
#代理的地址
# proxy_pass 指令属于ngx_http_proxy_module 模块,此模块可以将请求转发到另一台服务器
proxy_pass http://xxxx/;
}
}
#虚拟主机的配置,可以是多个在http模块里面就可以
server {
listen 9999;
....
}
}
对于一个前端应该够用了。哈哈
看到这里给我点个赞,谢谢😊
本文介绍了Nginx的基础概念,包括其作为HTTP服务器和反向代理服务器的角色。重点讲解了正向代理和反向代理的区别,并强调在前端开发中,Nginx常用作静态服务器、反向代理和负载均衡。文中还提供了一个简单的反向代理配置示例,指导如何将域名指向本地服务。

被折叠的 条评论
为什么被折叠?



