] Я пытаюсь сделать веб-интерфейс супервизора доступным по адресу http: // example. Я заставил его отображаться без косой черты, но ни один из изображений / 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;
}
Я боролся с этим целую вечность и не знаю, куда деваться. Может ли кто-нибудь указать мне правильное направление?
Спасибо.
Edit:
Спасибо, Ричард, это помогло мне продвинуться немного дальше. Мне пришлось изменить перенаправление на return 301 $ scheme: // $ host $ request_uri /;
, чтобы заставить его работать здесь, но теперь он перенаправляет на supervisor /
Теперь все выглядит нормально, но нажатие обновление, перезапуск и т. д. работает для команды, но не возвращается в / 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 = /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
(с использованием завершающего /
) . См. этот документ для получения дополнительной информации.