为什么在
这样可以完美工作:
proxy_pass
中变量无法工作?这样可以完美工作:
location /foo/ {
proxy_pass http://127.0.0.1/;
}
这完全不起作用:
location /foo/ {
set $FOO http://127.0.0.1/;
proxy_pass $FOO;
add_header x-debug $FOO;
}
我看到了x-header: http://127.0.0.1/
,但结果是404,所以我不知道它代理到哪里,但它与第一个示例不完全相同。
源代码中解释了,在proxy_pass中使用变量将防止NGINX在上游主机不可用时出现启动错误。
更新:问题在于上游路径重写。我希望将/foo/blah
重写为上游的/blah
,并删除前缀/foo
。使用静态主机/URI条目可以正常工作,但使用变量则不行。
resolver
指令? - Ivan Shatskyset $FOO http://127.0.0.1; proxy_pass $FOO/;
也没有去掉/foo
URI前缀。然而,你的最终解决方案有点过于复杂了,更简单的rewrite ^/foo(/.*) $1 break; proxy_pass http://$FOO;
可以稍微更有效地完成同样的任务。 - Ivan Shatsky