У меня проблема с nginx proxy_pass, и я изучал документацию HttpProxyModule в вики nginx, но не могу понять.
У меня есть супервайзер (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
, Я получаю страницу статуса супервизора. Но когда я нажимаю ссылку «обновить» (на странице, а не в браузере) или запускаю / останавливаю процесс, меня отправляют обратно на страницу вроде http://mydomain/?message=Process app started
, который просто переносит меня на экран-заставку nginx вместо страницы супервизора. Я дважды проверил источник html на странице, и он дает мне относительные ссылки. Так что, похоже, что-то в моей конфигурации удаляет / supervisor /, я просто не уверен, что.
Спасибо,
Я смог сделать это, добавив это в свой файл конфигурации 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;
}
Похоже, супервизор не работает при запуске в подпутье.
Настройте Nginx с супервизором, доступным на поддомене, например: http://supervisor.yourdomain.com/