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

Тема в разделе "Администрирование серверов", создана пользователем Горбушка, 19 ноя 2019.

Модераторы: mefish
  1. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.392
    Симпатии:
    2.361
    Нужна помощь с 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 http://q.local:8080;
    }
    Что может быть не так?

    Т.е. Tomcat отдаёт location /index, а nginx отдаёт location q.local/index
    Как убрать q.local из location на nginx? Откуда он его вообще взял?
     
  2. Stesh

    Stesh

    Регистр.:
    3 фев 2009
    Сообщения:
    292
    Симпатии:
    120
    Замени
    Код:
    proxy_pass http://q.local:8080;
    на
    Код:
    proxy_pass http://q.local:8080/;
    http://nginx.org/ru/docs/http/ngx_http_proxy_module.html#proxy_pass
     
  3. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.392
    Симпатии:
    2.361
    Близко, но нет.

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

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

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

    Вот в этом блоке и проблема... Мне нужно, чтобы имя сервера не добавлялось, чтобы редирект был с относительным путём...
     
    Последнее редактирование модератором: 20 ноя 2019
  4. parks

    parks

    Регистр.:
    18 сен 2008
    Сообщения:
    433
    Симпатии:
    86
    Реврайт нужен чтобы лишнее убирать, вообще зачем nginx перед томкатом? https://yandex.ru/turbo?text=https:...-veb-server-nginx-kak-front-end-k-apache.html Основной смысл в том что использовать upstream
    Вместо указания локального домена в проксипасс, остальное идентично
     
  5. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.392
    Симпатии:
    2.361
    В общем, проблема была решена - nginx поднят на 2 портах - 80 и 8081. Проброс порта сделан на 8081.
     
  6. Stesh

    Stesh

    Регистр.:
    3 фев 2009
    Сообщения:
    292
    Симпатии:
    120
    Нет, теперь нужно просто настроить server.xml. И все, работать будет без костылей.
     
  7. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.392
    Симпатии:
    2.361
    А при чём тут server.xml? Редирект на tomcat отдаётся относительным, что верно.
    Это уже nginx зачем-то подставляет домен.