Nginx 路径反向代理到另一个 Web 服务器始终返回根

Nginx 路径反向代理到另一个 Web 服务器始终返回根

我有一个由两个容器组成的 Docker 设置,它们连接到同一个网络。我在其中一个容器上有一个 Nginx 反向代理,如下所示:

location /some/directory/ {
    resolver 127.0.0.11 valid=30s;
    set $upstream_server foobar:1337;
    proxy pass http://$upstream_server/
}

这似乎在加载根页面时有效,但其他每个资产都奇怪地重定向(或缓存)到 index.html。每个图像、脚本和样式表都只是 index.html。

省略变量集并简单调用proxy pass http://foobar:1337/就可以了。然而我需要设置该变量以防止 nginx 因其他容器关闭且无法解析上游而无法启动。

检查网络流量,似乎浏览器正确地尝试从正确的位置获取正确的资产,但所有这些资产的内容都是index.html

当前访问跟踪如下所示:

mydomain/some/directory/ -> foobar:1337/
mydomain/some/directory/asset.png -> foobar:1337/
mydomain/some/directory/js/my.js -> foobar:1337/

这导致每个资产仅返回索引页。

我希望我的访问权限能够执行以下操作:

mydomain/some/directory/ -> foobar:1337/
mydomain/some/directory/asset.png -> foobar:1337/asset.png
mydomain/some/directory/js/my.js -> foobar:1337/js/my.js

答案1

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass

在某些情况下,无法确定要替换的请求 URI 的部分:

  • 当proxy_pass中使用变量时:
location /name/ {
    proxy_pass http://127.0.0.1$request_uri;
}

在这种情况下,如果指令中指定了 URI,则它将按原样传递给服务器,替换原始请求 URI。

相关内容