翼度科技»论坛 云主机 服务器技术 查看内容

Nginx中proxy_pass指令斜杠的作用及说明

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
前言

在使用Nginx的proxy_pass指令时,添加或不添加斜杠(/)会影响代理请求的行为
下面我就详细说明下,防止大家在配置的时候出现问题

没有斜杠

当proxy_pass后面没有斜杠时,代理服务器将会保留原始URI的路径,并将其追加到proxy_pass指定的后端服务器地址中。
简单来说,当proxy_pass代理地址端口后没有斜杠(/)和目录,转发后的地址就是代理服务器地址加请求的URL路径



举个例子

加入nginx服务器的地址是:192.168.30.120
配置如下
  1. location /api {
  2.         proxy_pass http://192.168.30.121:8083;
  3. }
复制代码
proxy_pass的代理地址只有ip和端口,后面没有斜杠和目录
这时候我们请求http://192.168.30.120:80/api/a,那么会转发到http://192.168.30.121:8083/api/a
相当于把路径直接拼接到我们的代理服务器地址

有斜杠

当proxy_pass后面添加了斜杠(/)时,那么会把匹配 location 的内容从请求路径中剔除,然后将剩下的路径拼接到proxy_pass的地址
举个例子

加入nginx服务器的地址是:192.168.30.120
  1. location /api {
  2.         proxy_pass http://192.168.30.121:8083/;
  3. }
复制代码
可以看到,proxy_pass的代理地址后有斜杠(/),这时候我们请求http://192.168.30.120:80/api/a,那么会转发到http://192.168.30.121:8083/a,路径中的/api会被剔除
还有一种情况, proxy_pass的结尾没有斜杠,但是ip端口后有斜杠,那么location 的路径会被剔除吗?
答案是会的
举个例子

配置如下
  1. location /api {
  2.         proxy_pass http://192.168.30.121:8083/test;
  3. }
复制代码
我们请求http://192.168.30.120:80/api/a,会被转发到http://192.168.30.121:8083/test/a,/api依旧是被剔除的
注意
nginx把location 地址剔除是包括/斜杠的,所以如果我们的配置如下
  1. location /api/ {
  2.         proxy_pass http://192.168.30.121:8083/test;
  3. }
复制代码
那么/api/就会被剔除,注意这里因为我们在/api后面也加上了/,那么会把路径中api的前后/斜杠也剔除
比如我们请求http://192.168.30.120:80/api/a,那么会被转发到http://192.168.30.121:8083/testa

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

来源:https://www.jb51.net/server/321118r64.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具