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请求限制配置方法
Jul 09 Servers
Nginx缓存设置案例详解
Sep 15 Servers
Windows下用Nginx配置https服务器及反向代理的问题
Sep 25 Servers
详解nginx安装过程并代理下载服务器文件
Feb 12 Servers
Tomcat用户管理的优化配置详解
Mar 31 Servers
Consul在linux环境的集群部署
Apr 08 Servers
阿里云ECS云服务器快照的概念以及如何使用
Apr 21 Servers
聊聊配置 Nginx 访问与错误日志的问题
May 25 Servers
nginx rewrite功能使用场景分析
May 30 Servers
Linux下搭建SFTP服务器的命令详解
Jun 25 Servers
Apache自带的ab压力测试工具的实现
Jul 23 Servers
Nginx 502 bad gateway错误解决的九种方案及原因
Aug 14 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
解决ajax+php中文乱码的方法详解
2013/06/09 PHP
php实现水仙花数的4个示例分享
2014/04/08 PHP
destoon二次开发常用数据库操作
2014/06/21 PHP
用js实现的一个Flash滚动轮换显示图片代码生成器
2007/03/14 Javascript
基于Jquery的将DropDownlist的选中值赋给label的实现代码
2011/05/06 Javascript
IFrame跨域高度自适应实现代码
2012/08/16 Javascript
使用JavaScript构建JSON格式字符串实现步骤
2013/03/22 Javascript
javascript为按钮注册回车事件(设置默认按钮)的方法
2015/05/09 Javascript
JQuery插入DOM节点的方法
2015/06/11 Javascript
常用javascript表单验证汇总
2020/07/20 Javascript
javascript从定义到执行 你不知道的那些事
2016/01/04 Javascript
jquery获取复选框的值的简单实例
2016/05/26 Javascript
Javascript中构造函数要注意的一些坑
2017/01/23 Javascript
又一款MVVM组件 构建自己的Vue组件(2)
2017/03/13 Javascript
深入理解Angular中的依赖注入
2017/06/26 Javascript
ajax前台后台跨域请求处理方式
2018/02/08 Javascript
vue中img src 动态加载本地json的图片路径写法
2019/04/25 Javascript
vue使用vuex实现首页导航切换不同路由的方法
2019/05/08 Javascript
Vue 动态组件components和v-once指令的实现
2019/08/30 Javascript
layui 地区三级联动 form select 渲染的实例
2019/09/27 Javascript
jquery实现直播弹幕效果
2019/11/28 jQuery
使用vue3重构拼图游戏的实现示例
2021/01/25 Vue.js
python迭代器实例简析
2014/09/25 Python
Python request设置HTTPS代理代码解析
2018/02/12 Python
Python如何调用外部系统命令
2019/08/07 Python
Python语言编写智力问答小游戏功能
2020/10/13 Python
HTML5 canvas基本绘图之图形组合
2016/06/27 HTML / CSS
Vision Direct比利时:在线订购隐形眼镜
2019/08/27 全球购物
sort命令的作用和用法
2013/08/25 面试题
计算机求职信
2013/12/01 职场文书
北京大学自荐信范文
2014/01/28 职场文书
村创先争优活动总结
2014/08/28 职场文书
交通事故委托书范本(2篇)
2014/09/21 职场文书
群众路线教育实践活动剖析材料
2014/09/30 职场文书
2014年基建工作总结
2014/12/12 职场文书
继承Win10缺点!教你关闭Win11烦人的网络搜索
2021/11/23 数码科技