nginx反向代理tomcat时session丢失、无效的问题

nginx反向代理tomcat时session丢失、无效的问题

最开始是因为我反代几个web服务器时,一刷新页面,session就失效了

最开始的配置文件如下

upstream bt40 {
server 192.168.31.40:12000;
keepalive 2000;
}
server {
listen 12040;
server_name 192.168.31.35;
client_max_body_size 1024M;

location / {
proxy_pass http://bt40/;
proxy_set_header Host $host:$server_port;
}
}

改成下面这个就可以了

upstream bt40 {
server 192.168.31.40:12000;
keepalive 2000;
}
server {
listen 12040;
server_name 192.168.31.35;
client_max_body_size 1024M;

location / {
proxy_pass http://bt40/;
#proxy_set_header Host $host:$server_port;
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
chunked_transfer_encoding off;
}
}

下面是详细说明,原文引自

https://blog.51cto.com/ityunwei2017/2165249

……
upstream 192.168.31.35 {
server 10.1.1.1:443 weight=5 max_fails=3 fail_timeout=30s;
server 10.1.1.2:443 weight=5 max_fails=3 fail_timeout=30s;
}
……
server {
listen 443 ssl;
…..
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto https;
proxy_redirect http:// $scheme://;
proxy_pass https://192.168.31.35/test/;
proxy_cookie_path /test/ /; #这里的路径要注意对应关系
proxy_set_header Cookie $http_cookie;
}
上面配置就能轻松实现代理,由于原始路径和代理路径发生了变化,导致 session 丢失,服务端获取的 session无效。如果路径代理路径和原始路径发生改变,就必须告诉服务器,加上路径转换proxy_cookie_path /edr /;可以将/edr的cookie输出到/上,Tomcat的session正常了。
如果需要更复杂的路径转换可用通配符的方式进行转换,详情要查看http://nginx.org/en/docs/http/ngx_http_proxy_module.html?&_ga=1.161910972.1696054694.1422417685#proxy_cookie_path了。

此条目发表在Nginx分类目录,贴了标签。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注