当前位置: 代码网 > 服务器>服务器>Linux > Nginx中proxy_pass末尾带斜杠/和不带的区别

Nginx中proxy_pass末尾带斜杠/和不带的区别

2026年02月04日 Linux 我要评论
nginx的代理的路径经常会让人摸不着头脑,所以打算整理一下该篇笔记,介绍nginx配置文件中proxy_pass路径后带/与不带/的区别,方便在自己需要时进行阅读查阅。假如要将8080端口上的请求转

nginx的代理的路径经常会让人摸不着头脑,所以打算整理一下该篇笔记,介绍nginx配置文件中proxy_pass路径后带/与不带/的区别,方便在自己需要时进行阅读查阅。

假如要将8080端口上的请求转发至3000端口。

以3000端口为例,编写proxy_pass有两种形式。

  1. 无斜杆:http://localhost:3000
  2. 有斜杆:http://localhost:3000/

假设前端请求为http://localhost:8080/get/test

我们暂且把/get/test称为请求部分。

不带 "/'

 server {
        listen 8080;
        server_name localhost;

        location /get {
            proxy_pass http://localhost:3000;
        }
        #或者
        location /get/ {
            proxy_pass http://localhost:3000;
        }
        #结果都是 将http://localhost:8080/get/test转发去http://localhost:3000/get/test
    }

proxy_pass:http://localhost:3000

无斜杆location匹配到的部分也属于请求的部分。

location无论用/get还是用/get/只要匹配上之后都会将整个请求部分/get/test加到proxy_pass上。

http://localhost:3000+/get/test等于请求http://localhost:3000/get/test

带 "/"

server {
  listen 8080;
  server_name localhost;
  location /get {
     # 结果是 将http://localhost:8080/get/test转发去http://localhost:3000//test,出错~
     proxy_pass http://localhost:3000/;
   }
   #或者
   location /get/ {
     # 结果是 将http://localhost:8080/get/test转发去http://localhost:3000/test
     proxy_pass http://localhost:3000/;
   }
 }

proxy_pass:http://localhost:3000/

有斜杆location匹配到的部分只用于匹配,不属于请求部分,需要在请求部分将location匹配到的部分剔除。

location用/get则是http://localhost:3000/+(/get/test -/get)等于请求http://localhost:3000//test

location用/get/则是http://localhost:3000/+(/get/test -/get/)等于请求http://localhost:3000/test

"/" 后面还有路径信息

server {
  listen 8080;
  server_name localhost;
  location /get {
    # 结果是 将http://localhost:8080/get/test转发去http://localhost:3000/abc/test
    proxy_pass http://localhost:3000/abc;
   }
   #或者
   location /get/ {
     # 结果是 将http://localhost:8080/get/test转发去http://localhost:3000/abctest,出错~
     proxy_pass http://localhost:3000/abc;
   }
}

proxy_pass:http://localhost:3000/abc

有斜杆的规则,在请求部分剔除location后加在上面即可。

location用/get则是http://localhost:3000/abc+(/get/test -/get)等于请求http://localhost:3000/abc/test

location用/get/则是http://localhost:3000/abc+(/get/test -/get/)等于请求http://localhost:3000/abctest

总结

  1. 不带 / 时,可以理解为简单的全路径拼接,不作任何处理
  2. 带 / 时, proxy_pass + (原路径 - 匹配规则)

到此这篇关于nginx中proxy_pass末尾带斜杠/和不带的区别的文章就介绍到这了,更多相关nginx中proxy_pass斜杠/内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com