【发布时间】:2022-02-25 16:28:00
【问题描述】:
为什么变量在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,所以我不知道它在哪里代理,但它与第一个示例不同。
Source 其中解释了在proxy_pass中使用变量将防止上游不可用时NGINX启动错误。
更新:问题是上游路径重写。我希望它将/foo/blah 重写到上游/blah 删除/foo 前缀。它适用于静态主机/uri 条目,但不适用于变量。
【问题讨论】:
-
您是否在您的 nginx 配置中添加了
resolver指令? -
我很困惑,解析器是对 DNS 服务器的引用。这如何适用于解析变量?事实上,我使用 127.0.0.1(而不是 localhost)所以我不需要 DNS...
-
在沙盒中用 OpenResty 1.17.8.2(基于 nginx 1.17 核心)测试了它,它对我来说就像一个魅力,没有任何额外的
resolver。现在无法使用 vanilla nginx 发短信... -
@IvanShatsky 问题是路径剥离。我们希望入站 /foo/bar/ 路由到上游 /bar/。
-
确实,
set $FOO http://127.0.0.1; proxy_pass $FOO/;也没有删除/fooURI 前缀。但是,您的最终解决方案有点过于复杂,更简单的rewrite ^/foo(/.*) $1 break; proxy_pass http://$FOO;会更有效地执行相同的操作。
标签: nginx