Обратный прокси 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;
Другие вопросы по тегам