我们提供安全,免费的手游软件下载!
Nginx是一款由俄罗斯开发的HTTP Web服务器,常用于负载均衡和反向代理。今天,我们将探讨Nginx作为反向代理时的路由配置方法。
假设您已经成功部署Nginx,接下来进入Nginx的安装目录并打开nginx.conf文件。
在该文件中,找到http节点下的server节点,其值为JSON格式。在JSON中,有一个名为location的指令,用于代表转发规则。
通常的形式如下:
{$path}代表源URL的部分匹配,而proxy_pass后的{$url}则代表转发的目标URL。
当进行转发时,是否携带原有路径是一个关键问题。举例来说:
如果我们请求http://127.0.0.1:80/abc(假设Nginx服务器的端口是80),则请求的路径为/abc。此时将匹配到location指令规则/abc,请求将被转发至本机的9090端口。
若我们请求http://127.0.0.1:80/abc/cloud,则请求的路径为/abc/cloud。在这种情况下,同样会匹配到location指令规则,请求将被转发至本机的9090端口。
但这里出现了一个问题,转发至9090端口时,是否需要补充/abc?后面的/cloud部分是否需要追加?这与$url是否包含路径有关,无斜杠代表不包含路径,有斜杠代表包含路径。
一、无路径场景
若$url为http://127.0.0.1:9090,表示无路径。在这种情况下,将直接追加源URL的路径部分。
举例:
(1) 请求http://127.0.0.1:80/abc/bcd,则跳转至http://127.0.0.1:9090/abc/bcd
(2) 请求http://127.0.0.1:80/abc/bcd,则跳转至http://127.0.0.1:9090/abc/bcd
(3) 请求http://127.0.0.1:80/abc/bcd/,则跳转至http://127.0.0.1:9090/abc/bcd/
简而言之,如果proxy_pass后配置的目标URL不包含路径信息(包括/),则会直接将源URL的路径部分追加到目标URL中。
二、有路径场景
若$url为http://127.0.0.1:9090/,表示有路径;若$url为http://127.0.0.1:9090/gov,同样表示有路径;若$url为http://127.0.0.1:9090/gov/,也表示有路径。
在这种情况下,将去掉源URL的路径部分后,直接追加到目标URL后。
举例:
(1) 请求http://127.0.0.1:80/abc/bcd,则跳转至http://127.0.0.1:9090/bcd
(2) 请求http://127.0.0.1:80/abc/bcd,则跳转至http://127.0.0.1:9090/gov/bcd
(3) 请求http://127.0.0.1:80/abc/bcd/,则跳转至http://127.0.0.1:9090/gov/cd/
(4) 请求http://127.0.0.1:80/abc/b/cd/,则跳转至http://127.0.0.1:9090/gov//cd/
简而言之,如果proxy_pass后配置的目标URL包含路径信息(包括/),则会将源URL的路径部分匹配后剩余的部分路径,直接追加到目标URL中。
另外,如果有多个匹配规则都命中,Nginx会按照最大匹配原则进行处理。例如,请求http://127.0.0.1:80/abc/ai/,Nginx会选择匹配对象,并将请求转发至9093端口。
热门资讯