Как обрабатывать обратный прокси-сервер nginx с обратным URL-адресом

#nginx #nginx-reverse-proxy #nginx-location

Вопрос:

У меня есть стороннее приложение, назовите его 3partyapp, которое выполняет возврат, например, если я ввожу в браузере

 example.com/3partyapp
 

он ответит

 example.com/3partyapp/Account/Login?ReturnUrl=/3partyapp
 

Все это работает, теперь я хочу поместить его за обратный прокси-сервер nginx.

На коробке nginx, когда я делаю

 curl -i 10.17.1.6/3partyapp/Account/Login?ReturnUrl=/3partyapp
 

это работает (я получаю http 200), окно nginx и сервер 3partyapp находятся в одной сети, а 10.17.1.6-это частный ip-адрес 3partyapp.

Если я сделаю

 curl -i 10.17.1.6/3partyapp
 

Я получаю 302

Вот мой блок определения местоположения nginx

     location /3partyapp {
        proxy_set_header        Host                            $host ;
        proxy_set_header        X-Forwarded-Host                $host;
        proxy_set_header        X-Forwarded-Server              $host;
        proxy_set_header        X-Forwarded-For                 $proxy_add_x_forwarded_for;
        proxy_pass              http://10.17.1.6/3partyapp;
        proxy_pass_header       Set-Cookie;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_cookie_path / "/; HTTPOnly;  Secure";
        autoindex off;
   }
 

С помощью этой настройки в браузере я набираю

 example.com/3partyapp
 

Я получаю 404 с

 https://example.com/3partyapp/Account/Login?ReturnUrl=/3partyapp
 

Я думаю, что мне нужна функция proxy_rewrite, но она не увенчалась успехом, поэтому я очень признателен за любые рекомендации.

Комментарии:

1. С каким Location заголовком вы получаете ответ HTTP 302 curl -i 10.17.1.6/3partyapp ?

2. HTTP/1.1 302 Найдено Управление кэшем: личное содержимое-Тип: текст/html; кодировка=utf-8 Расположение: /3partyapp/Учетная запись/Логин? returnUrl=/3partyapp X-Работает от: ASP.NET Дата: Вс, 29 авг 2021 23:44:26 GMT Длина содержимого: 164 <html><html><заголовок><заголовок><заголовок>Объект перемещен<заголовок></заголовок></заголовок></заголовок></голова > < / голова><тело> <тело><h2>Объект перемещен в <h2> returnUrl=/3partyapp»>здесь></a>.</a></h2> </h2></body></body></html>

Ответ №1:

Надеюсь, это вам поможет. Поместите это в свой nginx.conf

 server {
    listen       80;
    server_name  example.com;
    
    location /3partyapp/ {
      proxy_pass http://10.17.1.6/3partyapp/Account/Login?ReturnUrl=/3partyapp;         
    }
}
 

Комментарии:

1. спасибо за ваше предложение, но такое же поведение, как и у меня

2. @munchine, пожалуйста, попробуйте отредактированное решение. Здесь я предположил, что example.com подается через порт 80. В противном случае вам придется поместить туда соответствующий порт