在用nginx的反向代理tomcat的路徑中,可能會出現session丟失問題。每發送一次請求 JESSIONID 都會發生改變,說明上一次造成的session丟失,從而建立新的session。html
第一種狀況:nginx
server{ listen 80; server_name www.jiahemdata.com www.jiahemdata.cn; charset utf-8; location /{ proxy_redirect off; proxy_pass http://127.0.0.1:8093; proxy_set_header Host $host; proxy_set_header Referer $http_referer; proxy_set_header X-Real-Ip $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } access_log logs/tomcat_access.log; }
因爲當前對的nginx只是監聽一個端口,不設定路徑,全部通常不會出現session丟失的問題。web
第二種狀況:緩存
server{ listen 80; server_name www.jiahemdata.com www.jiahemdata.cn; root /opt/tomcat-jhyx/webapps/jhyx/; charset utf-8; location /{ proxy_pass http://127.0.0.1:8093/jhyx/; proxy_set_header Host $host; proxy_set_header Referer $http_referer; proxy_set_header X-Real-Ip $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } access_log logs/tomcat_access.log; }
這種狀況,指定了tomcat的文件夾,不單單是一個端口監聽,會致使每次請求都會發生變化,致使session丟失。tomcat
第三種狀況:安全
server{ listen 80; server_name www.jiahemdata.com www.jiahemdata.cn; root /opt/tomcat-jhyx/webapps/jhyx/; charset utf-8; location /{ proxy_redirect off; proxy_pass http://127.0.0.1:8093/jhyx/; proxy_cookie_path /jhyx/ /; //設置cookie路徑,從而不致使每次發生請求發生變化。 proxy_cookie_path /jhyx /; proxy_set_header Host $host; proxy_set_header Referer $http_referer; proxy_set_header X-Real-Ip $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } access_log logs/tomcat_access.log; }
這時候,發現你的問題依然沒有解決,這時候你在想,我明明已經設置cookie路徑了,怎麼還不行呢,那是由於你請求的時候沒有發送cookie。服務器
第四種狀況:cookie
server{ listen 80; server_name www.jiahemdata.com www.jiahemdata.cn; root /opt/tomcat-jhyx/webapps/jhyx/; charset utf-8; location /{ proxy_redirect off; proxy_pass http://127.0.0.1:8093/jhyx/; proxy_cookie_path /jhyx/ /; proxy_cookie_path /jhyx /; proxy_set_header Host $host; proxy_set_header Referer $http_referer; proxy_set_header Cookie $http_cookie; //請求發送時攜帶cookie信息 proxy_set_header X-Real-Ip $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } access_log logs/tomcat_access.log; }
問題解決。網絡
但願你在茫茫網絡,找到一個正確的解決方法。session
Nginx系列教程(4)nginx處理web應用負載均衡問題以保證高併發
Nginx系列教程(5)如何保障nginx的高可用性(keepalived)
Nginx系列教程(6)nginx location 匹配規則詳細解說