解决Nginx+Tomcat下客户端https请求跳转成http的问题
Nginx上開啟https, ?后端使用Tomcat, ?兩者間走h(yuǎn)ttp協(xié)議, 但發(fā)現(xiàn)如果tomcat應(yīng)用存在跳轉(zhuǎn)時, 則客戶端瀏覽器會出現(xiàn)400 Bad Request的錯誤, 通過抓包發(fā)現(xiàn)原因是302跳轉(zhuǎn)響應(yīng)的Location頭中的URL是http協(xié)議的, ?在tomcat的端號采用非標(biāo)準(zhǔn)80端口時會導(dǎo)致客戶端出現(xiàn)400. ?解決方案是修改nginx.conf, 讓nginx將302跳轉(zhuǎn)響應(yīng)能智能的修改location頭域的內(nèi)容, ?即添加以下一行到配置中的server段
?
問題:瀏覽器打開https://www.ttlsa.com/aaa.html,然后跳轉(zhuǎn)到http://www.ttlsa.com/aaa.html
網(wǎng)站架構(gòu):用戶--https--->nginx代理---http---->tomcat/nginx+php
nginx待遇發(fā)給后端的請求是http協(xié)議,后端程序跳轉(zhuǎn)獲取到的協(xié)議是http,返回一個redirect(http header中帶Location:http://www.ttlsa.com/aaa.html),瀏覽器收到location,跳轉(zhuǎn)到了location指定的地方。
?
proxy_redirect http:// $scheme://;
?
nginx代理中配置proxy_redirect
proxy_redirect http:// $scheme://;
以上指令會將后端響應(yīng)header location內(nèi)容中的http://替換成用戶端協(xié)議https://。
NGINX訪問https跳轉(zhuǎn)到http的解決了~
?
?例如:
?
server
{
listen 8443;
server_name test.com;
access_log logs/test.com.access.log main;
?
?
ssl on;
ssl_certificate /home/test/cer/server.crt;
ssl_certificate_key /home/test/cer/server.key;
?
?
ssl_session_timeout 5m;
?
?
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
?
location /projectname?{
proxy_pass http://192.168.1.33:8080;
proxy_set_header Host $host:$server_port;
proxy_redirect http:// $scheme://;
}
轉(zhuǎn)載于:https://www.cnblogs.com/charon2/p/10349754.html
總結(jié)
以上是生活随笔為你收集整理的解决Nginx+Tomcat下客户端https请求跳转成http的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode-95-Unique B
- 下一篇: 【数组】 - 有序数组设计