我有一个由两个容器组成的 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。