2014-12-05 3 views
0

Я использую nginx в качестве front-end сервера и tomcat как back-end. Клиенты получают доступ к моему сайту через схему https. Например:Неправильная схема переадресации при использовании nginx в качестве обратного прокси

https://example.com/app/test 

Nginx получить это и передать запрос через этот кот локальный адрес:

http://localhost:8080/app/test 

Мой Nginx конфигурации:

location/{ 
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forward-For $remote_addr; 
    proxy_set_header X-Forward-For $proxy_add_x_forwarded_for; 
    proxy_set_header X-Forward-Proto $scheme; 
    proxy_pass http://localhost:8080; 
} 

Это прекрасно работает. Однако, когда я пытаюсь использовать перенаправление (http 302), он всегда превращает https в http. Это мой редирект код:

response.sendRedirect("/app/redirect-test"); 

То, что я ожидал, чтобы перенаправить браузер на:

https://example.com/app/redirect-test 

но всегда перенаправляет браузер:

http://example.com/app/redirect-test. 

Я также лог заголовки для отслеживания этой проблемы:

host : example.com 
x-real-ip : 180.168.202.246 
x-forward-for : 180.168.202.246 
x-forward-proto : https 
connection : close 
...... 

Но я до сих пор не могу понять. И я пытаюсь войти request.getRequestURL(), то я получаю этот результат:

http://example.com/app/test 

Как я могу решить эту проблему?

+0

Я понял, что допущена ошибка, Х- Forward-For должен быть X-Forwarded-For и X-Forward-Proto должен быть X-Forwarded-Proto. Но после того, как я это исправил, проблема все еще существует. – guogangj

ответ

1

У меня есть решение.

nginx.conf

location/{ 
    proxy_set_header Host $host; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header X-Forwarded-Proto $scheme; 
    proxy_pass http://localhost:8080; 
} 

server.xml Хост раздел ИЗМЕНЯЮТ для Tomcat

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> 
<!-- blah blah blah --> 
<Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="X-Forwarded-For" protocolHeader="X-Forwarded-Proto" protocolHeaderHttpsValue="https"/> 
</Host> 

Перейти на это место, чтобы увидеть детали: Tomcat Doc

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