прокси nginx передать супервизору

] Я пытаюсь сделать веб-интерфейс супервизора доступным по адресу 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;
}
1
задан 2 July 2017 в 03:09
1 ответ

Если файлы ресурсов указаны с использованием 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 (с использованием завершающего / ) . См. этот документ для получения дополнительной информации.

0
ответ дан 4 December 2019 в 04:49

Теги

Похожие вопросы