nginx proxy подменяет redirect location

Горбушка

Ищу её...
Регистрация
2 Май 2008
Сообщения
3.444
Реакции
2.524
Нужна помощь с nginx

Есть tomcat, работает на порту 8080. После авторизации делает редирект 302 на location /index
Есть nginx, работает на порту 80. Проксирует tomcat. И подменяет location на $host/index (Вместо $host домен/ip из браузера)

Беда в том, что сделан проброс извне на порт 8081... Если авторизоваться - то tomcat всё шлёт верно, но nginx добавляет хост, забывая про порт - человек отправляется на 80, а там никого нет...
location /index {
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 Для просмотра ссылки Войди или Зарегистрируйся
}
Что может быть не так?

Т.е. Tomcat отдаёт location /index, а nginx отдаёт location q.local/index
Как убрать q.local из location на nginx? Откуда он его вообще взял?
 
Что может быть не так?
Замени
Код:
proxy_pass http://q.local:8080;
на
Код:
proxy_pass http://q.local:8080/;

Для просмотра ссылки Войди или Зарегистрируйся
Если директива proxy_pass указана с URI, то при передаче запроса серверу часть Для просмотра ссылки Войди или Зарегистрируйся URI запроса, соответствующая location, заменяется на URI, указанный в директиве

Если директива proxy_pass указана без URI, то при обработке первоначального запроса на сервер передаётся URI запроса в том же виде, в каком его прислал клиент, а при обработке изменённого URI - нормализованный URI запроса целиком
 
Близко, но нет.

Здесь речь о передачи заголовков от клиента к серверу, а у меня проблема при передаче от сервера клиенту...

Как я понял, тут надо смотреть в сторону proxy_redirect
Но вот что туда прописать, я так и не понял.

Беда в том, что из внутренней сети nginx доступен по 80 порту, а из внешней - по 8081... И домены тоже разные...
Не хочется делать 2 разных блока server...

В заменяемой строке можно не указывать имя сервера:
proxy_redirect Для просмотра ссылки Войди или Зарегистрируйся /;
тогда будут подставлены основное имя сервера и порт, если он отличен от 80.
Вот в этом блоке и проблема... Мне нужно, чтобы имя сервера не добавлялось, чтобы редирект был с относительным путём...
 
Последнее редактирование модератором:
Нужна помощь с nginx

Есть tomcat, работает на порту 8080. После авторизации делает редирект 302 на location /index
Есть nginx, работает на порту 80. Проксирует tomcat. И подменяет location на $host/index (Вместо $host домен/ip из браузера)

Беда в том, что сделан проброс извне на порт 8081... Если авторизоваться - то tomcat всё шлёт верно, но nginx добавляет хост, забывая про порт - человек отправляется на 80, а там никого нет...
location /index {
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 Для просмотра ссылки Войди или Зарегистрируйся
}
Что может быть не так?

Т.е. Tomcat отдаёт location /index, а nginx отдаёт location q.local/index
Как убрать q.local из location на nginx? Откуда он его вообще взял?
Реврайт нужен чтобы лишнее убирать, вообще зачем nginx перед томкатом? Для просмотра ссылки Войди или Зарегистрируйся Основной смысл в том что использовать upstream
Вместо указания локального домена в проксипасс, остальное идентично
 
В общем, проблема была решена - nginx поднят на 2 портах - 80 и 8081. Проброс порта сделан на 8081.
 
А при чём тут server.xml? Редирект на tomcat отдаётся относительным, что верно.
Это уже nginx зачем-то подставляет домен.
 
Назад
Сверху