Я привык использовать Apache с mod_proxy_html и пытаюсь добиться чего-то подобного с NGINX. Конкретный вариант использования заключается в том, что у меня есть пользовательский интерфейс администратора, работающий в Tomcat на порту 8080 на сервере в корневом контексте:
http://localhost:8080/
Мне нужно отобразить это на порту 80, но у меня есть другие контексты на сервере NGINX, работающем на этом хосте, поэтому я хочу попробовать получить к нему доступ по адресу:
http://localhost:80/admin/
Я надеялся, что следующий супер простой серверный блок сделает это, но это не совсем так:
server {
listen 80;
server_name screenly.local.akana.com;
location /admin/ {
proxy_pass http://localhost:8080/;
}
}
Проблема в том, что возвращаемый контент (html) содержит URL-адреса скриптов и информацию о стилях, доступ к которой осуществляется в корневом контексте, поэтому мне нужно переписать эти URL-адреса, чтобы они начинались с / admin / вместо /.
Как мне это сделать в NGINX?
sub_filter "http://localhost/" "http://localhost/admin/"
text/html
mimetype, мне также пришлось добавитьsub_filter_types *;
.http://your_server/admin/
что получу разрешениеhttp://your_server
во время proxy_pass, но это не так, и я получаю сообщение об ошибкеreact-router /admin/ location did not match any routes
в моем приложении, потому что мое приложение ничего не знает о '/ admin'.proxy_redirect
директиву, чтобыLocation
заголовок, отправленный ответом, также изменялся в соответствии с URL-адресом. Ознакомьтесь с этим руководством: cyberciti.biz/faq/…Вам также может потребоваться установка следующей директивы перед первым "sub_filter" для backend-серверов со сжатием данных:
В противном случае это может не сработать. Для вашего примера это будет выглядеть так:
источник
Вы можете использовать следующий пример конфигурации nginx:
источник
proxy_redirect off;
. Также добавлюproxy_set_header X-Forwarded-Proto $scheme;
.