Nginx如何配置根据路径转发详解


Posted in Servers onJuly 23, 2022

先谈理解:

1.反向代理:是nginx代理所有的服务器。而正向代理是vpn代理客户端!!

反向代理是配置 proxy_pass 可以只配置一个地址如 :

proxy_pass http://127.0.0.1:8081;

也可以配置多个

2.那就是负载均衡

定义负载均衡服务器:

upstream myserver {
    server        192.168.12.127:8080;
    server        192.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 {
  listen        9000;
  server_name        192.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 {
    server        192.168.12.127:8080;
    server        192.168.12.127:8081;
}
server {
    listen        80;
    server_name        192.168.12.127;
    location / {
        proxy_pass        http://myserver;
        root        html;
        index        index.html index.htm;
    }
}

3. nginx分配服务器的策略

轮询:默认策略;每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除

权重:指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

upstream myserver {
    server        192.168.12.127:8080 weight=10;
    server        192.168.12.127:8081 weight=5;
}

IP绑定 ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题

upstream myserver { 
  ip_hash; 
  server        192.168.12.127:8080;
  server        192.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 {
    listen        80;
    server_name        192.168.12.127;
    location /html/ {
        root        /shisan/;
        index        index.html index.htm;
    }
    location /image/ {
        root        /shisan/;
        autoindex        on;            // 列出文件的目录,可以自行观看对比就知道
    }
}

6.nginx配置高可用集群

1. 因为我这里环境不允许,可以参考这个文章

Location规则

语法规则: location [=||*|^~] /uri/ {… }

首先匹配 =,其次匹配^~,其次是按文件中顺序的正则匹配,最后是交给 /通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

符号 含义
= = 开头表示精确匹配
^~ ^~开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)
~ ~ 开头表示区分大小写的正则匹配
~* ~ 开头表示不区分大小写的正则匹配*
!和!* !和!*分别为区分大小写不匹配及不区分大小写不匹配的正则
/ 用户所使用的代理(一般为浏览器)
$http_x_forwarded_for 可以记录客户端IP,通过代理服务器来记录客户端的ip地址
$http_referer 可以记录用户是从哪个链接访问过来的

比这些 location 规则来选择一个 location,对比的顺序可以总结为:

  1. 首先匹配前缀匹配(没有 RE 表达式),针对当前这个请求,每个前缀匹配都匹配一遍.
  2. 搜索=匹配,如果当前请求匹配上了,搜索将会停止,直接使用这个这个 location.
  3. 如果第二步没有匹配上,nginx 会按照如下步骤继续搜索最长前缀匹配:
    3.1 如果最长前缀匹配有^~这个modifier,nginx 会停止搜索并直接使用这个 location.
    3.2 如果没有使用 ^~,暂存这个 location并且继续搜索.
  4. 只要最长前缀匹配被暂存和选中,nginx 就会看当前的 location 是否有大小写敏感的 RE(~和~*),第一个匹配上这种会被当做有效的 location来处理这个请求.
  5. 如果没有 RE 的 location 匹配上,前面暂存的 location 就会被选中来处理这个请求.

举例

如下是一些 location 配置的例子,用来详细描述上面所说的处理顺序,你也可以按照具体实际情况来修改这些例子.

location  = / {
  #  只处理请求 /.
}
location /data/ {
  # 所有以 /data/ 匹配,但是还会继续搜索.
  # 如果没有其他 location 匹配上,就用这个处理请求.
}
location ^~ /img/ {
  # 所有以 /img/ 开头的请求并且会停止搜索.
}
location ~* .(png|gif|ico|jpg|jpeg)$ {
  # 以png, gif, ico, jpg ,jpeg结尾的请求. 
  # 如果请求是到 /img/ 路径的话 还是会被上面?的 location 处理
}

总结

到此这篇关于Nginx如何配置根据路径转发的文章就介绍到这了,更多相关Nginx根据路径转发内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!


Tags in this post...

Servers 相关文章推荐
解决Nginx 配置 proxy_pass 后 返回404问题
Mar 31 Servers
Nginx设置日志打印post请求参数的方法
Mar 31 Servers
Nginx + consul + upsync 完成动态负载均衡的方法详解
Mar 31 Servers
利用Nginx代理如何解决前端跨域问题详析
Apr 02 Servers
Nginx四层负载均衡的配置指南
Jun 11 Servers
Nginx实现负载均衡的项目实践
Mar 18 Servers
Nginx反向代理、重定向
Apr 13 Servers
nginx设置资源请求目录的方式详解
May 30 Servers
Linux磁盘管理方法介绍
Jun 01 Servers
ubuntu下常用apt命令介绍
Jun 05 Servers
SpringBoot前端后端分离之Nginx服务器下载安装过程
Aug 14 Servers
Flink 侧流输出源码示例解析
Sep 23 Servers
Linux中一对多配置日志服务器的详细步骤
Jul 23 #Servers
Nginx如何限制IP访问只允许特定域名访问
Jul 23 #Servers
nginx访问报403错误的几种情况详解
Jul 23 #Servers
在windows server 2012 r2中安装mysql的详细步骤
Nginx报404错误的详细解决方法
Jul 23 #Servers
彻底卸载VMware虚拟机的超详细步骤记录
Jul 15 #Servers
windows server2016安装oracle 11g的图文教程
Jul 15 #Servers
You might like
PHP文本操作类
2006/11/25 PHP
PHP学习笔记之三 数据库基本操作
2011/01/17 PHP
PHP中substr_count()函数获取子字符串出现次数的方法
2016/01/07 PHP
深入解析PHP的Yii框架中的event事件机制
2016/03/17 PHP
PHP利用超级全局变量$_POST来接收表单数据的实例
2016/11/05 PHP
yii2 resetful 授权验证详解
2017/05/18 PHP
JQuery 前台切换网站的样式实现
2009/06/22 Javascript
33种Javascript 表格排序控件收集
2009/12/03 Javascript
jQuery搜索子元素的方法
2015/02/10 Javascript
vue.js入门教程之基础语法小结
2016/09/01 Javascript
图片懒加载插件实例分享(含解析)
2017/01/09 Javascript
Angular 5.0 来了! 有这些大变化
2017/11/15 Javascript
用JS实现一个简单的打砖块游戏
2019/12/11 Javascript
微信小程序scroll-view的滚动条设置实现
2020/03/02 Javascript
Vue中el-form标签中的自定义el-select下拉框标签功能
2020/04/20 Javascript
[01:08:17]2018DOTA2亚洲邀请赛3月29日 小组赛B组 EG VS VGJ.T
2018/03/30 DOTA
Python编程之黑板上排列组合,你舍得解开吗
2017/10/30 Python
opencv改变imshow窗口大小,窗口位置的方法
2018/04/02 Python
解决pycharm运行时interpreter为空的问题
2018/10/29 Python
python3使用QQ邮箱发送邮件
2020/05/20 Python
用Python写一个自动木马程序
2019/09/17 Python
Python中的sys.stdout.write实现打印刷新功能
2020/02/21 Python
Python Flask上下文管理机制实例解析
2020/03/16 Python
详解CSS的border边框属性及其在CSS3中的新特性
2016/05/10 HTML / CSS
用CSS3实现无限循环的无缝滚动的实例代码
2017/07/04 HTML / CSS
巧用CSS3的calc()宽度计算做响应模式布局的方法
2018/03/22 HTML / CSS
美国知名玩具品牌:Melissa & Doug
2016/08/16 全球购物
DNA测试:Orig3n
2019/03/01 全球购物
美国二手复古奢侈品包包购物网站:LXRandCo
2019/06/18 全球购物
联谊活动策划书
2014/01/26 职场文书
出纳担保书范文
2014/04/02 职场文书
送温暖献爱心活动总结
2014/07/08 职场文书
暑假社会实践证明格式
2014/10/28 职场文书
学生上课迟到检讨书
2015/01/01 职场文书
股东合作协议书模板2篇
2019/11/05 职场文书
Vue ECharts实现机舱座位选择展示功能
2022/05/15 Vue.js