Nginx中proxy_pass指令斜杠的作用及说明
我们在使用 Nginx 的proxy_pass
指令时,添加或不添加斜杠(/)会影响代理请求的行为,本文我就详细总结一下,防止大家在配置的时候出现问题,影响大家工作。
没有斜杠
当proxy_pass
后面没有斜杠时,代理服务器将会保留原始 URI 的路径,并将其追加到 proxy_pass 指定的后端服务器地址中。
简单来说,当proxy_pass
代理地址端口后没有斜杠(/)和目录,转发后的地址就是代理服务器地址加请求的 URL 路径
例子
加入 nginx 服务器的地址是:192.168.11.120
配置如下:
location /api { proxy_pass http://192.168.11.121:8083; }
proxy_pass 的代理地址只有 ip 和端口,后面没有斜杠和目录,这时候我们请求http://192.168.11.120:80/api/a
,那么会转发到http://192.168.11.121:8083/api/a
,相当于把路径直接拼接到我们的代理服务器地址。
有斜杠
当 proxy_pass 后面添加了斜杠(/)时,那么会把匹配 location 的内容从请求路径中剔除,然后将剩下的路径拼接到 proxy_pass 的地址。
例子
加入 nginx 服务器的地址是:192.168.11.120
location /api { proxy_pass http://192.168.11.121:8083/; }
可以看到,proxy_pass
的代理地址后有斜杠(/),这时候我们请求http://192.168.11.120:80/api/a
,那么会转发到http://192.168.11.121:8083/a
,路径中的/api
会被剔除
还有一种情况, proxy_pass 的结尾没有斜杠,但是 ip 端口后有斜杠,那么 location 的路径会被剔除吗?
答案是会的
例子
配置如下:
location /api { proxy_pass http://192.168.11.121:8083/test; }
我们请求http://192.168.11.120:80/api/a
,会被转发到http://192.168.11.121:8083/test/a
,/api
依旧是被剔除的。
注意:nginx 把 location 地址剔除是包括/斜杠的。
所以如果我们的配置如下:
location /api/ { proxy_pass http://192.168.11.121:8083/test; }
那么/api/
就会被剔除,注意这里因为我们在/api
后面也加上了/
,那么会把路径中 api 的前后/
斜杠也剔除
比如我们请求http://192.168.11.120:80/api/a
,那么会被转发到http://192.168.11.121:8083/testa
。
结语
以上就是关于 Nginx 中 proxy_pass 指令斜杠的作用及说明全部内容,个人笔记总结,希望对大家有帮助,更多 Nginx 相关内容关注码云笔记其他文章。
码云笔记 » Nginx中proxy_pass指令斜杠的作用及说明
![](https://media.mybj123.com/wp-content/uploads/2024/02/1706962282-d2a91681b352c3a.png)