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 相关文章推荐
Windows下使用Nginx+Tomcat做负载均衡的完整步骤
Mar 31 Servers
使用Nginx搭载rtmp直播服务器的方法
Oct 16 Servers
Kubernetes控制节点的部署
Apr 01 Servers
idea下配置tomcat避坑详解
Apr 12 Servers
docker 制作mysql镜像并自动安装
May 20 Servers
nginx rewrite功能使用场景分析
May 30 Servers
讨论nginx location 顺序问题
May 30 Servers
使用Apache Camel表达REST服务的方法
Jun 10 Servers
WinServer2012搭建DNS服务器的方法步骤
Jun 10 Servers
kubernetes集群搭建Zabbix监控平台的详细过程
Jul 07 Servers
Nginx文件已经存在全局反向代理问题排查记录
Jul 15 Servers
zabbix 代理服务器的部署与 zabbix-snmp 监控问题
Jul 15 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中调用JAVA
2006/10/09 PHP
PHP 身份证号验证函数
2009/05/07 PHP
php生成HTML文件的类方法
2019/10/11 PHP
了解了这些才能开始发挥jQuery的威力
2013/10/10 Javascript
javascript学习笔记之10个原生技巧
2014/05/21 Javascript
深入分析下javascript中的[]()+!
2015/07/07 Javascript
js实现类似菜单风格的TAB选项卡效果代码
2015/08/28 Javascript
JavaScript里 ==与===区别详解
2016/08/16 Javascript
js style.display=block显示布局错乱问题的解决方法
2016/09/21 Javascript
关于Jquery中的事件绑定总结
2016/10/26 Javascript
轻松理解JavaScript之AJAX
2017/03/15 Javascript
Vue2.0 给Tab标签页和页面切换过渡添加样式的方法
2018/03/13 Javascript
如何用input标签和jquery实现多图片的上传和回显功能
2018/05/16 jQuery
微信小程序上传图片实例
2018/05/28 Javascript
小程序实现授权登陆的解决方案
2018/12/02 Javascript
webpack4手动搭建Vue开发环境实现todoList项目的方法
2019/05/16 Javascript
vue实现按需加载组件及异步组件功能
2019/05/27 Javascript
详解Vue 如何监听Array的变化
2019/06/06 Javascript
使用vue中的混入mixin优化表单验证插件问题
2019/07/02 Javascript
微信小程序上传帖子的实例代码(含有文字图片的微信验证)
2020/07/11 Javascript
vue中解决拖拽改变存在iframe的div大小时卡顿问题
2020/07/22 Javascript
Python读取Excel的方法实例分析
2015/07/11 Python
Python实现拷贝多个文件到同一目录的方法
2016/09/19 Python
Python字典的基本用法实例分析【创建、增加、获取、修改、删除】
2019/03/05 Python
python for循环remove同一个list过程解析
2019/08/14 Python
docker django无法访问redis容器的解决方法
2019/08/21 Python
基于python3监控服务器状态进行邮件报警
2019/10/19 Python
想学画画?python满足你!
2020/12/24 Python
html5定位获取当前位置并在百度地图上显示
2014/08/22 HTML / CSS
美国特价机票专家:Airfarewatchdog
2018/01/24 全球购物
心理健康教育心得体会
2013/12/29 职场文书
战友聚会邀请函
2014/01/18 职场文书
少儿节目主持串词
2014/04/02 职场文书
部门年终奖分配方案
2014/05/07 职场文书
2015年安全生产责任书
2015/01/30 职场文书
SQL Server 忘记密码以及重新添加新账号
2022/04/26 SQL Server