我正在尝试配置 nginx 以代理在主机端口 8000 上运行的 cadvisor docker 实例。
我有以下配置:
upstream cadvisor {
server 127.0.0.1:8000;
}
...
...
server {
...
...
location /cadvisor {
rewrite ^([^.]*[^/])$ $1/ permanent;
rewrite ^/cadvisor$ /cadvisor/ permanent;
rewrite ^/cadvisor(/.*) $1 break;
auth_basic "Restricted"; #For Basic Auth
auth_basic_user_file /etc/nginx/.htpasswd; #For Basic Auth
proxy_pass http://cadvisor;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_redirect ~^/(.*)/ /cadvisor/$1;
}
...
...
}
这适用于除以下 URL(这是 cadvisor 生成的链接之一)之外的所有 URLhttps://myserver.com/cadvisor/containers//docker/a11c7edcc131d92c6ec3476329e5a54c82d2c31ee3f5592ba3fcb9386cb4f06a
这可能是因为 URL 中“docker”前面的双斜杠弄乱了 css 路径。如果我能将这些 URL 重定向到单斜杠版本的 URL(即https://myserver.com/cadvisor/containers/docker/a11c7edcc131d92c6ec3476329e5a54c82d2c31ee3f5592ba3fcb9386cb4f06a)
有没有办法将 URL 重定向到单斜线版本?
答案1
该rewrite
指令似乎对 URI 的规范化版本进行操作,该版本看不到 double 序列/
。 可以/
通过对变量进行操作来纠正 double 情况$request_uri
:
if ($request_uri ~ ^(.*)//(.*)$) { return 302 $1/$2; }
看这种警告关于该if
指令。