我正在尝试使supervisord Web界面在http://example.com/supervisor
尝试了很多个小时后,我终于可以用斜线 (http://example.com/supervisor/)。我也让它显示时不带尾部斜杠,但图像/css 等均不起作用。
我是 nginx 新手,所以我猜我的重写规则有问题。第一次重写时我尝试添加尾部斜杠。
监控配置文件
[unix_http_server]
file = /tmp/supervisor.sock ; (the path to the socket file)
chmod=0700 ; socket file mode (default 0700)
nginx.conf
location ~* ^/supervisor/? {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_x_host;
proxy_set_header X-NginX-Proxy true;
rewrite ^(.*[^/])$ $1/;
rewrite /supervisor/(.*) /$1 break;
proxy_pass http://unix:/tmp/supervisor.sock:;
proxy_redirect off;
proxy_buffering off;
}
我已经为此苦苦挣扎了好久,不知道该怎么办。有人能给我指明正确的方向吗?
谢谢。
编辑:
谢谢 Richard,这帮助我更进一步。我不得不将重定向更改为return 301 $scheme://$host$request_uri/;
才能在这里工作,但现在它重定向到主管/
现在看起来没问题了,但是按刷新、重启等命令可以正常工作,但不会返回到 /supervisor/。我将supervisord 更改为 inet_server 进行测试,当转到 example.com:9001 时一切正常。我尝试代理到 inet 服务器,但仍然不起作用。例如刷新按钮发送:/supervisor/index.html?action=refresh
并返回/?message=Page%20refreshed%20at%20Sat%20Jul%20%201%2014%3A10%3A27%202017
它看起来没有返回到 /supervisor/,而是返回到服务器的根目录(example.com/?message=...)?有什么想法可以解决这个问题吗?
编辑2: 好吧,在谷歌搜索了几个小时后,我找到了这个对我有用的解决方案。读到我应该远离 nginx 中的 if,所以它可能不是一个很好的解决方案。至少它现在在这里有效。我将其添加到我的 conf 中:
if ($http_referer ~* example.com/supervisor ) {
set $test supervisor;
}
if ($request_uri ~* message ) {
set $test "${test}+message";
}
if ($request_uri !~ supervisor ) {
set $test "${test}+addsup";
}
if ($test = "supervisor+message+addsup") {
return $scheme://$host/supervisor$request_uri;
break;
}
答案1
如果使用路径相对 URI 指定资源文件,浏览器可能需要看到尾部斜杠。在这种情况下,您可以重定向/supervisor
到/supervisor/
,这也会简化您现有的location
块。例如:
location = /supervisor {
return 301 /supervisor/;
}
location ^~ /supervisor/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_x_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://unix:/tmp/supervisor.sock/;
proxy_redirect off;
proxy_buffering off;
}
请注意,第二个块现在是一个前缀位置,而前一个rewrite
语句现在通过proxy_pass
(使用尾随/
)实现。参见这个文件了解更多信息。