#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 302curl -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. В противном случае вам придется поместить туда соответствующий порт