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基于域名,端口,不同IP的虚拟主机设置的实现
Mar 31 Servers
阿里云Nginx配置https实现域名访问项目(图文教程)
Mar 31 Servers
Nginx工作原理和优化总结。
Apr 02 Servers
nginx中proxy_pass各种用法详解
Nov 07 Servers
Apache Linkis 中间件架构及快速安装步骤
Mar 16 Servers
Windows Server 2016 配置 IIS 的详细步骤
Apr 28 Servers
Windows Server 2019 安装DHCP服务及相关配置
Apr 28 Servers
服务器SVN搭建图文安装过程
Jun 21 Servers
Windows server 2012 NTP时间同步的实现
Jun 25 Servers
教你nginx跳转配置的四种方式
Jul 07 Servers
windows server2012 R2下安装PaddleOCR服务的的详细步骤
Sep 23 Servers
ubuntu20.04虚拟机无法上网的问题及解决
Dec 24 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 动态添加记录
2009/03/10 PHP
探讨方法的重写(覆载)详解
2013/06/08 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
2015/12/28 PHP
利用PHPExcel读取Excel的数据和导出数据到Excel
2017/05/12 PHP
PHP的PDO大对象(LOBs)
2019/01/27 PHP
tp5(thinkPHP5框架)时间查询操作实例分析
2019/05/29 PHP
PHP中散列密码的安全性分析
2019/07/26 PHP
Yii框架学习笔记之应用组件操作示例
2019/11/13 PHP
ExtJs3.0中Store添加 baseParams 的Bug
2010/03/10 Javascript
Draggable Elements 元素拖拽功能实现代码
2011/03/30 Javascript
JavaScript1.6数组新特性介绍以及JQuery的几个工具方法
2013/12/06 Javascript
JavaScript中this的9种应用场景及三种复合应用场景
2015/09/12 Javascript
js验证手机号、密码、短信验证码代码工具类
2020/06/24 Javascript
vue的基本用法与常见指令
2017/08/15 Javascript
jquery根据name取得select选中的值实例(超简单)
2018/01/25 jQuery
JS/jQuery实现DIV延时几秒后消失或显示的方法
2018/02/12 jQuery
Vue中util的工具函数实例详解
2019/07/08 Javascript
layer.js之回调销毁对话框的例子
2019/09/11 Javascript
js编写简易的计算器
2020/07/29 Javascript
[56:58]VP vs Optic 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python中的with...as用法介绍
2015/05/28 Python
快速入手Python字符编码
2016/08/03 Python
python2.7 json 转换日期的处理的示例
2018/03/07 Python
Django rest framework工具包简单用法示例
2018/07/20 Python
Django中在xadmin中集成DjangoUeditor过程详解
2019/07/24 Python
Python面向对象之Web静态服务器
2019/09/03 Python
通过实例学习Python Excel操作
2020/01/06 Python
Python中itertools的用法详解
2020/02/07 Python
澳大利亚最受欢迎的美发用品目的地:AMR
2019/08/28 全球购物
自动一体化专业求职信
2014/03/15 职场文书
主题实践活动总结
2014/05/08 职场文书
工作疏忽、懈怠的检讨书
2014/09/11 职场文书
2014年安全保卫工作总结
2014/11/13 职场文书
2015年财政所工作总结
2015/04/25 职场文书
外出听课学习心得体会
2016/01/15 职场文书
golang操作redis的客户端包有多个比如redigo、go-redis
2022/04/14 Golang