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作grpc的反向代理踩坑总结
Jul 07 Servers
Rhit高效可视化Nginx日志查看工具
Nov 01 Servers
Nginx 路由转发和反向代理location配置实现
Nov 11 Servers
Nginx隐藏式跳转(浏览器URL跳转后保持不变)
Apr 07 Servers
安装Windows Server 2012 R2企业版操作系统并设置好相关参数
Apr 29 Servers
nginx lua 操作 mysql
May 15 Servers
永中文档在线转换预览基于nginx配置部署方案
Jun 10 Servers
openEuler 搭建java开发环境的详细过程
Jun 10 Servers
超越Nginx的Web服务器caddy优雅用法
Jun 21 Servers
windows server 2016 域环境搭建的方法步骤(图文)
Jun 25 Servers
Nginx报404错误的详细解决方法
Jul 23 Servers
WIN10使用IIS部署ftp服务器详细教程
Aug 05 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 Smarty date_format [格式化时间日期]
2010/03/15 PHP
用穿越火线快速入门php面向对象
2012/02/22 PHP
php中的mongodb select常用操作代码示例
2014/09/06 PHP
php7新特性的理解和比较总结
2019/04/14 PHP
php常用日期时间函数实例小结
2019/07/04 PHP
19个很有用的 JavaScript库推荐
2011/06/27 Javascript
javascript中自定义对象的属性方法分享
2013/07/12 Javascript
Jquery 切换不同图片示例代码
2013/12/05 Javascript
jquery中EasyUI实现同步树
2015/03/01 Javascript
浅谈使用MVC模式进行JavaScript程序开发
2015/11/10 Javascript
jQueryUI Datepicker组件设置日期高亮
2016/10/13 Javascript
微信小程序 HTTPS报错整理常见问题及解决方案
2016/12/14 Javascript
Angular 2父子组件数据传递之局部变量获取子组件其他成员
2017/07/04 Javascript
vue鼠标悬停事件实例详解
2019/04/01 Javascript
Vue函数式组件的应用实例详解
2019/08/30 Javascript
VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-model绑定的数据不能实时更新)
2020/04/03 Javascript
js实现表格数据搜索
2020/08/09 Javascript
Python 学习笔记
2008/12/27 Python
Python发送Email方法实例
2014/08/21 Python
Python+matplotlib实现填充螺旋实例
2018/01/15 Python
解决Pycharm出现的部分快捷键无效问题
2018/10/22 Python
python中的逆序遍历实例
2019/12/25 Python
使用python实现希尔、计数、基数基础排序的代码
2019/12/25 Python
Python虚拟环境virtualenv创建及使用过程图解
2020/12/08 Python
html5贪吃蛇游戏使用63行代码完美实现
2013/06/25 HTML / CSS
使用canvas压缩图片大小的方法示例
2019/08/02 HTML / CSS
英国音乐设备和乐器商店:Gear4music
2017/10/16 全球购物
Araks官网:纽约内衣品牌
2020/10/15 全球购物
应届毕业生个人自我评价
2013/09/20 职场文书
户外宣传策划方案
2014/05/25 职场文书
小学家长学校培训材料
2014/08/24 职场文书
2014年最新党员对照检查材料汇总
2014/09/15 职场文书
领导干部群众路线教育实践活动剖析材料
2014/10/10 职场文书
初中家长评语大全
2014/12/26 职场文书
使用numpy nonzero 找出非0元素
2021/05/14 Python
业余无线电通联Q语
2022/02/18 无线电