2015-03-15 2 views
1

Я использую Spring Boot + Spring Security. Мы используем nginx на продукцию, которую proxy_pass обращается к нашему приложению. Проблема в том, что приложение перенаправляет на http вместо https (когда пользователь выходит из системы).Как заставить Spring Boot перенаправить на https вместо http?

Как заставить Spring перенаправить на https на производство env и по-прежнему перенаправить на http на dev env?

ответ

1

Проблема заключается в том, что nginx больше всего разговаривает с вашим приложением через HTTP, и приложение считает (правильно), что запрос пришел для URL-адреса HTTP, поэтому при вычислении URL-адресов для перенаправления он также получит HTTP. Существует несколько способов решить эту проблему:

Быстрый поиск Google, по-видимому, указывает на наличие модуля AJP для nginx. Может быть, вы можете использовать это вместо HTTP-прокси? Вероятно, это разрешило бы это, поскольку не было бы HTTP-трафика между nginx и приложением (таким образом, HTTPS-> HTTP-переключатель).

Другой способ - установить заголовок X-Forwarded-Proto в nginx и make Spring Boot aware of it.

3

Я думаю, что лучшее решение будет включить

server.tomcat.remote_ip_header=x-forwarded-for 
server.tomcat.protocol_header=x-forwarded-proto 

в вашем встроенном коте, и пусть весна писать правильные заголовки перенаправления.

Не забудьте включить в конфигурацию в вашем nginx.conf как:

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
proxy_set_header X-Forwarded-Host $server_name; 
proxy_set_header X-Forwarded-Proto $scheme; 

Но будьте уверены, что ваш Nginx находится в диапазоне адресов server.tomcat.internal_proxies в противном случае вы должны изменить диапазон (который, например, необходимого , при использовании соединения докеров и контейнеров).

Смежные вопросы