原文地址:
http://blog.sina.com.cn/s/blog_40ce02d70102wbzo.html
解決nginx https代理tomcat redirect問題
原文地址:
https://blog.csdn.net/juncke/article/details/52539175
問題描述
http服務器:nginx,10.10.10.95,版本:1.10.1,請求使用協議為https,端口為18080。
服務服務器:tomcat,10.10.10.92,使用協議為http,端口為8080。
問題:當在業務服務器使用sendRedirect時,tomcat響應302給nginx,nginx再響應給瀏覽器,默認情況下,nginx響應給瀏覽器的location會將schema換為http,端口為:80。
這就導致瀏覽器redirect后,訪問不到正確資源。
過程舉例:
瀏覽器輸入:https://10.10.10.95:18080/redirect_test.do
redirect_test.do中執行sendRedirect("/welcome.do")
瀏覽器接收到的redirect響應(302)中location為http://10.10.10.95/welcome.do
瀏覽器跳到http://10.10.10.95/welcome.do,發現訪問不了
解決方案
修改nginx配置,關鍵配置如下:
server{
listen 18080;
server_name ecsc;
ssl on;
ssl_certificate /root/ssl/test.crt;
ssl_certificate_key /root/ssl/test_nopass.key;
error_page 497 https://$host:8080;
access_log /var/log/nginx/access.log main;
proxy_redirect http:// $scheme://; port_in_redirect on;
location ~/druid{
return 404;
}
location /{
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
expires 10d;
proxy_pass http://console.eayun.com ;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
}
說明:
使用proxy_redirect將location中的協議轉換為請求nginx的協議。
使用port_in_redirect on指示nginx使用請求的端口,而不是使用默認端口。
proxy_set_header Host $host:$server_port;很關鍵,我也不明白為啥,不設置,端口為變為80。