在nginx.conf中更正代理路径

SPI*_*984 24 nginx

我们有两台服务器,A和B.服务器A可在全球范围内访问.他安装了nginx.这就是我在conf中所拥有的:

location /test {
  proxy_pass http://localserver.com;
}
Run Code Online (Sandbox Code Playgroud)

它应该做的是将addreess http://globalserver.com/test(即服务器A)转换为内部服务器地址http://localserver.com.但是,它会附加位置路径,也就是说,它会查找http://localserver.com/test,这根本不可用.如何将代理传递到正确的地址,丢弃该位置的最后一部分?

Chu*_* Ma 44

这应该工作.Nginx应剥离上游本地服务器上的"/ test"路径.所以我能说的不是原因.为了使它更好一点,试试这个:

location /test/ {
  proxy_pass http://localserver.com/;
}
Run Code Online (Sandbox Code Playgroud)

我在前两行添加的2个斜杠将避免错误地匹配'/ testABC'并将错误的请求发送到上游本地服务器,例如.

你有没有

proxy_redirect
Run Code Online (Sandbox Code Playgroud)

在相同的位置块?如果您的上游本地服务器具有重定向,那么该行上的错误将导致您所描述的问题.

[ UPDATE ]找到原始配置无法工作的根本原因并且我的工作原理:如果proxy_pass指令本身没有URI路径,则nginx不会替换URI路径部分.所以我在最后添加斜杠(斜杠被视为URI路径)的修复触发了URI路径替换.

参考:http://wiki.nginx.org/HttpProxyModule#proxy_pass

如果需要以未处理的形式传输URI,则应使用指令proxy_pass而不使用URI部分

location  /some/path/ {
  proxy_pass   http://127.0.0.1;
}
Run Code Online (Sandbox Code Playgroud)

  • 那么这里的解决方案是,如果我在URI`proxy_pass http:// 127.0.0.1 /`的末尾添加反斜杠(根路径),nginx不会在末尾添加传入路径吗? (2认同)