我在使用 nginx proxy_pass 时遇到了问题,并仔细研究了 nginx wiki 上的 HttpProxyModule 文档,但还是无法解决问题。
我有主管(http://supervisord.org/) 在本地主机(127.0.0.1:9001)上运行,并且 nginx 将所有流量从端口 80 重定向到 443。我希望当我转到时能够进入主管状态页面https://mydomain/supervisor
。
我的 nginx.conf 文件的相关部分如下所示 -
server {
listen 80;
server_name mydomain;
return 301 https://$host$request_uri;
}
server {
listen 443;
server_name mydomain;
# .. bunch of ssl stuff
location /supervisor/ {
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:9001/;
}
}
这很好用,当我转到时https://mydomain/supervisor
,我得到了supervisord状态网页。但是当我点击“刷新”链接(在页面上,而不是浏览器刷新)或启动/停止进程时,我就会被送回一个页面,就像这样http://mydomain/?message=Process app started
,它只会带我到nginx启动画面而不是supervisor页面。我仔细检查了页面上的html源代码,它给了我相对链接。所以似乎是我的配置中的一些东西删除了/supervisor/,我只是不确定是什么。
谢谢,
答案1
看起来,在子路径中运行时,主管不能正常工作。
设置 Nginx 并在子域上可以访问主管,例如:http://supervisor.yourdomain.com/
答案2
我可以通过将以下内容添加到我的 nginx 配置文件中来实现这一点:
upstream supervisor {
server 127.0.0.1:9001 fail_timeout=0;
}
server {
# server configuration
location /supervisor {
return 301 $uri/index.html;
}
location /supervisor/ {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# hack the host https://github.com/Supervisor/supervisor/issues/251
proxy_set_header Host $http_host/supervisor/index.html;
proxy_redirect off;
rewrite ^/supervisor(.*)$ /$1 break;
proxy_pass http://supervisor;
}