nginx location 和 proxy_pass后面的 URI 是否有 结尾的区别

10 min read
  • proxy_pass 是一种反向代理的配置,它可以将用户请求转发到其他服务器或端口。例如,你可以使用 proxy_pass 将用户请求 / 转发到 http://localhost:8080,将用户请求 /test 转发到 http://localhost:3000⁴:

    location / {
      proxy_pass http://localhost:8080;
    }
    location /test {
      proxy_pass http://localhost:3000;
    }
    
  • proxy_pass 的配置需要注意 locationproxy_pass 后面的 URI 是否有 / 结尾,因为这会影响最终的转发地址。例如,如果你配置了以下的 locationproxy_pass¹:

    location /proxy/ {
      proxy_pass http://myblog.com:8000/;
    }
    

    那么,当用户请求 /proxy/login.html 时,Nginx 会将 /proxy/ 整个从 URL 里面删除,转发到 http://myblog.com:8000/login.html¹。如果你想保留 /proxy/,你可以去掉 proxy_pass 后面的 /,或者使用变量:

    location /proxy/ {
      proxy_pass http://myblog.com:8000;
    }
    # 或者
    location /proxy/ {
      proxy_pass http://myblog.com:8000$uri;
    }