我们有两台服务器,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部分
Run Code Online (Sandbox Code Playgroud)location /some/path/ { proxy_pass http://127.0.0.1; }
| 归档时间: |
|
| 查看次数: |
47489 次 |
| 最近记录: |