我正在尝试在http://example.com/supervisor上提供supervisord网页界面
尝试了好几个小时后,我用正斜杠( http://example.com/supervisor/ )正确工作。 我得到它显示没有太斜杠,但没有图像/ CSS等的作品。
我是nginx的新手,所以我猜我的重写规则有些问题。 第一次重写是我试图添加一个结尾的斜杠。
supervisord.conf
[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; }
我一直在这个问题上奋斗了很多年,不知道该去哪里。 任何人都可以指向正确的方向吗?
谢谢。
编辑:谢谢理查德,这帮助我进一步。 我不得不改变redirect到return 301 $scheme://$host$request_uri/; 让它在这里工作,但现在它redirect到主pipe/
它现在看起来不错,但按刷新,重新启动等作品的命令,但不返回到/ supervisor /。 我改变supervisord到inet_servertesting,当去example.com:9001一切工作正常。 我试图代理到inet服务器,但它仍然无法正常工作。 例如刷新button发送: /supervisor/index.html?action=refresh /?message=Page%20refreshed%20at%20Sat%20Jul%20%201%2014%3A10%3A27%202017 /supervisor/index.html?action=refresh并返回/?message=Page%20refreshed%20at%20Sat%20Jul%20%201%2014%3A10%3A27%202017看起来它不返回到/ supervisor /但是到服务器的根(example.com/?message = …)? 任何想法如何我可以解决这个问题?
编辑2:好吧谷歌search几个小时后,我做了这个解决scheme,为我工作。 请阅读,如果在nginx,我应该远离,所以这可能不是一个很好的解决scheme。 至less现在在这里工作。 我把这个添加到我的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; }
如果资源文件是使用path相对URI指定的,则浏览器可能需要查看结尾的斜杠。 在这种情况下,您可以将/supervisorredirect到/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 (使用尾随/ )实现。 请参阅此文档了解更多