当Nginx作为反向代理时丢失Cookies,通常由以下原因导致:
在Nginx配置中添加以下指令:
location / {
proxy_pass http://backend;
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 X-Forwarded-Proto $scheme;
# 关键配置:确保Cookie和授权信息被传递
proxy_pass_header Set-Cookie;
proxy_pass_header Cookie;
proxy_set_header Cookie $http_cookie;
# 保持原始请求中的头信息
proxy_ignore_headers Set-Cookie;
proxy_hide_header Set-Cookie;
}
如果前后端域名不同:
proxy_cookie_domain backend-domain.com frontend-domain.com;
proxy_cookie_path / /;
# 如果后端设置的Cookie路径与前端不同
proxy_cookie_path /backend-path/ /;
# 增加缓冲区大小处理大Cookies
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend-server;
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 X-Forwarded-Proto $scheme;
proxy_pass_header Set-Cookie;
proxy_pass_header Cookie;
proxy_set_header Cookie $http_cookie;
proxy_cookie_domain backend-server example.com;
proxy_cookie_path / /;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
}
}
tail -f /var/log/nginx/error.log
log_format headers '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'Cookie: "$http_cookie" Set-Cookie: "$sent_http_set_cookie"';
通过以上配置,应该能够解决大多数Nginx转发丢失Cookies的问题。如果问题仍然存在,可能需要进一步检查后端应用的Cookie设置。