Nginx如何配置根据路径转发详解
目录
- 先谈理解:
- 1.nginx基本概念
- 2.常用命令以及配置文件
- 3.nginx配置实例之反向代理
- 4.nginx配置实例之负载均衡
- 5.nginx配置实例之动静分离
- 6.nginx配置高可用集群
- Location规则
- 举例
- 总结
先谈理解:
1.反向代理:是nginx代理所有的服务器。而正向代理是vpn代理客户端!!
反向代理是配置 proxy_pass 可以只配置一个地址如 :
proxy_pass http://127.0.0.1:8081;
也可以配置多个
2.那就是负载均衡
定义负载均衡服务器:
upstream myserver { server192.168.12.127:8080; server192.168.12.127:8081; }
修改proxy_pass
proxy_pass http://myserver;
这样就实现了 反向代理 (proxy_pass)+ 负载均衡(upstream)
1.nginx基本概念
Nginx的概念
- 正向代理和反向代理:
- 正向代理:正向代理就是在客户端配置代理服务器,通过代理服务器去进行互联网操作。(VPN代理客户端)
- 反向代理:客户端发送请求到反向代理服务器,由反向代理服务器去选择目标服务器获取它的数据,在返回给客户端。此时反向代理服务器和目标服务器对外就是一台服务器,暴露的是代理服务器地址,隐藏了真实的服务器地址。(代理服务端)
- 负载均衡
- 在多个服务器的情况下,我们将请求发放到各个服务器上,将原先请求集中到单个服务器的情况改为将请求发送到多个服务器上,将负载分发到不同的服务器,也就是负载均衡
- 动静分离
- 简单理解就是把静态资源和动态资源分开部署。为了加快网站解析的速度,可以把静态资源和动态资源部署到不同的服务器来解析,加快解析速度。降低单个服务器的压力!
2.常用命令以及配置文件
Win下nginx的常用命令
- 前提:需要进入到nginx目录下在进行操作
- nginx -v:查看nginx版本号
- nginx -s stop:关闭nginx
- start nginx:启动nginx
- nginx -s reload:重新加载nginx
- nginx -t 检查默认配置conf
- taskkill /f /im nginx.exe win杀掉nginx
nginx配置文件
- 全局块
- 主要设置一些影响nginx服务器运行的配置指令。主要包括配置运行nginx服务器的用户,允许生成的worker process数,进程PID存放路径,日志存放路径和类型以及配置文件的引入等
- 比如:worker_process 1; 这个就代表nginx服务器并发处理服务的关键配置,它的值越大,表示支持的并发处理量越多,但是会受到硬件,软件等设备的约束。
- events块
- events块主要影响nginx服务器与用户的网络连接,是否开启同时多个网络连接
- 比如:worker_connections:1024;表示最大连接数为1024个
- http块(http块包含了http全局块和server块)
- 这时nginx配置最频繁的部分,代理,缓存,日志等都是在这里配置。
- http全局块:主要是配置日志等等的配置
- server块:
- server全局快:listen:参数对应的是端口号;server_name:地址参数
- location块:用来配置响应反向代理的。增加参数proxy_pass 服务器(反向代理去到的服务器)地址(比如:127.0.0.1:8080)
3.nginx配置实例之反向代理
1. 实现效果:监听9000端口。根据不同的路径跳转到不同的端口服务中
2. 准备工作
准备好两个服务器:8080和8081
在8080tomcat的webapps里面添加一个shisan01文件夹,编写一个shisan.html。内容自己定就好,同理8081也是一样,添加一个shisan02文件夹,编写一个shisan.html。跑完之后访问不同的服务测试
3. 前往nginx配置文件配置
进入配置文件,如下配置
server { listen9000; server_name192.168.12.127; location ~/shisan01/ { proxy_pass http://127.0.0.1:8080; } location ~/shisan02/ { proxy_pass http://127.0.0.1:8081; } }
PS:注意要记得开发端口号:8080 8081 9000
PS:location的指令可以百度了解一下
4.nginx配置实例之负载均衡
1. 准备工作
同样是两个tomcat(8080和8081)服务器,当然要是你真有两台服务器最好!哈哈哈。条件问题还是模拟。
在两个服务器里面的webapps里面创建一个shisan文件夹,在shisan文件夹里创建一个shisan.html,添加内容自己定就好
2. 在nginx配置文件中修改配置
在http块中配置
upstream myserver { server192.168.12.127:8080; server192.168.12.127:8081; } server { listen80; server_name192.168.12.127; location / { proxy_passhttp://myserver; roothtml; indexindex.html index.htm; } }
3. nginx分配服务器的策略
轮询:默认策略;每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除
权重:指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream myserver { server192.168.12.127:8080 weight=10; server192.168.12.127:8081 weight=5; }
IP绑定 ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
upstream myserver { ip_hash; server192.168.12.127:8080; server192.168.12.127:8081; }
fair:按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backserver { server 192.168.12.127:8080; server 192.168.12.127:8081; fair; }
url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
5.nginx配置实例之动静分离
1. 准备工作
弄好一个动态资源一个静态资源:比如
- /shisan/image/01.jpg
- /shisan/html/01.html
2. 配置nginx文件
server { listen80; server_name192.168.12.127; location /html/ { root/shisan/; indexindex.html index.htm; } location /image/ { root/shisan/; autoindexon; // 列出文件的目录,可以自行观看对比就知道 } }
6.nginx配置高可用集群
1. 因为我这里环境不允许,可以参考这个文章
Location规则
语法规则: location [=||*|^~] /uri/ {… }
首先匹配 =,其次匹配^~,其次是按文件中顺序的正则匹配,最后是交给 /通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。
比这些 location 规则来选择一个 location,对比的顺序可以总结为:
- 首先匹配前缀匹配(没有 RE 表达式),针对当前这个请求,每个前缀匹配都匹配一遍.
- 搜索=匹配,如果当前请求匹配上了,搜索将会停止,直接使用这个这个 location.
- 如果第二步没有匹配上,nginx 会按照如下步骤继续搜索最长前缀匹配:
3.1 如果最长前缀匹配有^~这个modifier,nginx 会停止搜索并直接使用这个 location.
3.2 如果没有使用 ^~,暂存这个 location并且继续搜索. - 只要最长前缀匹配被暂存和选中,nginx 就会看当前的 location 是否有大小写敏感的 RE(~和~*),第一个匹配上这种会被当做有效的 location来处理这个请求.
- 如果没有 RE 的 location 匹配上,前面暂存的 location 就会被选中来处理这个请求.
举例
如下是一些 location 配置的例子,用来详细描述上面所说的处理顺序,你也可以按照具体实际情况来修改这些例子.
location = / { # 只处理请求 /. }
location /data/ { # 所有以 /data/ 匹配,但是还会继续搜索. # 如果没有其他 location 匹配上,就用这个处理请求. }
location ^~ /img/ { # 所有以 /img/ 开头的请求并且会停止搜索. }
location ~* .(png|gif|ico|jpg|jpeg)$ { # 以png, gif, ico, jpg ,jpeg结尾的请求. # 如果请求是到 /img/ 路径的话 还是会被上面