环境:
nodejs : 主要框架【express、express-session】
mongodb: 保存Session数据
问题:本地通过http://localhost:7013可以正常登陆系统,但在服务器上使用Nginx代理之后,在NodeJs日志中虽然有到Session输出,但每次请求都会导致重新生成新的新的Session信息,导致重复登陆或一直提示登陆出错
检查:
1. NodeJs Session是开启的,数据也是写入成功了,使用客户端链接到Mongodb可以查看到【排除框架问题】
2. 直接通过主机IP+端口可以正常操作【排除代码问题】
3. 服务器上使用了Nginx proxy 来做代理访问,问题应该在这,对此NodeJs代码的配置如下:
proxy_cache_path temp/7013_cache1 levels=1:2 keys_zone=7013_cache1:200m inactive=1d max_size=10g;
server {
listen 80;
server_name codelinux.cn;
add_header X-Cache $upstream_cache_status;
access_log logs/codelinux.cn_access.log main;
error_log logs/codelinux.cn_error.log crit;
location / {
proxy_pass http://127.0.0.1:7013;
proxy_redirect off;
proxy_buffering on;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Cookie $http_cookie;
proxy_ignore_headers Set-Cookie Cache-Control;
proxy_hide_header Cache-Control;
#此处的是个坑,怪自己没学好吧!
#使用如下配置的时候,就不写入Cookie到客户端了,参考官方说明
# http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_hide_header
#proxy_hide_header Set-Cookie;
proxy_cache 7013_cache1;
proxy_cache_key $host$uri$is_args$args;
proxy_cache_valid 200 304 10m;
proxy_max_temp_file_size 1024m;
proxy_buffer_size 8k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}