Я пытаюсь сделать веб-интерфейс супервизора доступным по адресу http://example.com/supervisor
После многих часов попыток я заставил его работать правильно с завершающей косой чертой (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;
}
Я борюсь с этим целую вечность и не знаю, куда деваться. Может ли кто-нибудь указать мне правильное направление?
Спасибо.
Редактировать: Спасибо, Ричард, это помогло мне продвинуться немного дальше. Мне пришлось изменить перенаправление на return 301 $scheme://$host$request_uri/;
чтобы заставить его работать здесь, но теперь он перенаправляется на супервизора /
Сейчас все выглядит нормально, но нажатие кнопки «Обновить», «перезапуск» и т. Д. Работает для команды, но не возвращает в / supervisor /. Я сменил supervisord на inet_server для тестирования, и при переходе на example.com:9001 все работает нормально. Я пробовал прокси-сервер на инет-сервер, но он все равно не работает. Например. кнопка обновления отправляет: /supervisor/index.html?action=refresh
и возвращается с /?message=Page%20refreshed%20at%20Sat%20Jul%20%201%2014%3A10%3A27%202017
Похоже, он возвращается не в / supervisor /, а в корень сервера (example.com/?message = ...)? Есть идеи, как я могу это исправить?
Edit2: Хорошо, после нескольких часов поиска в Google я сделал это решение, которое работает для меня. Прочтите, что я должен держаться подальше от if в nginx, так что это, вероятно, не лучшее решение. По крайней мере, сейчас это работает. Я добавил это в свою конф:
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;
}
Если файлы ресурсов указаны с использованием 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
(используя завершающий /
). Видеть этот документ для большего.