Обратный прокси Nginx переписать, чтобы скрыть имя приложения
Этот вопрос можно задавать много раз, я читал, но все еще не могу получить то, что хочу.
У меня запущено приложение http://172.17.1.10:8080/myapp
Я хотел бы настроить обратный прокси-сервер nginx для доступа к приложению с помощью http://sub.domain.com
только скрывая "myapp" в адресной строке.
Моя текущая настройка:
server{
listen 80;
server_name sub.domain.com;
location /myapp {
rewrite ^/myapp(.*) /$1 break;
proxy_pass http://172.17.1.10:8080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
include /etc/nginx/proxy_params;
}
}
Но я продолжаю просматривать страницу индекса Nginx с http://sub.domain.com
, а также http://sub.domain.com/myapp
индексная страница кота. Что мне не хватает?
2 ответа
Когда вы изменяете содержимое URI, обрабатываемого в блоке местоположения, содержащем директиву proxy_pass, вам нужно обрабатывать Location
заголовок переписывается с помощью proxy_redirect:
В некоторых случаях часть URI запроса, подлежащая замене, не может быть определена:
Когда местоположение указано с помощью регулярного выражения. В этом случае директива должна быть указана без URI.
Когда URI изменяется в прокси-расположении с помощью директивы rewrite, и эта же конфигурация будет использоваться для обработки запроса (перерыв).
Но в вашем случае нет причин использовать перезапись, потому что nginx уже обрабатывает это в директиве proxy_pass при добавлении префикса URI:
Если директива proxy_pass указана с помощью URI, то при передаче запроса на сервер часть нормализованного URI запроса, соответствующая местоположению, заменяется на URI, указанный в директиве.
Также вам нужно удалить proxy_redirect
директива, чтобы nginx мог переписать Location
заголовки, использующие префикс proxy_pass URI в качестве шаблона и префикс местоположения в качестве замены.
Так что просто используйте это:
server {
server_name sub.domain.com;
location / {
proxy_pass http://172.17.1.10:8080/myapp/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
include /etc/nginx/proxy_params;
}
}
Изменение этих трех строк должно исправить вас:
location /myapp {
rewrite ^/myapp(.*) /$1 break;
proxy_pass http://172.17.1.10:8080;
Для того, чтобы:
location / {
proxy_pass http://172.17.1.10:8080/myapp;