我尝试使用以下nginx配置,以便在所有子域中共享Cookie。不幸的是,看起来像X-Forwarded-For和proxy_cookie_domain的行被nginx完全忽略(没有效果)。我有什么想法我做错了吗?
server {
server_name discuss.mysite.com;
error_log /var/log/nginx/discuss.log;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_cookie_domain ~^(.*)$ "$1; Domain=.discuss.mysite.com";
}
}
这是curl -I:
的输出HTTP/1.1 200 OK
Server: nginx/1.4.6 (Ubuntu)
Date: Wed, 25 Mar 2015 18:14:45 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Vary: Accept-Encoding
Status: 200 OK
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Set-Cookie: destination_url=http%3A%2F%2Fdiscuss.mysite.com%2F; path=/
Set-Cookie: _forum_session=eTZVVGFzNWJDNjdnV0l0SGFlWDF2MDN2VUtQSnZ0NlN2MmVaR3NKR1A3VFB3MUZFVmRhbTlYNmwxS29TaWkvT05rQmtSaFQwbUhUVjNKeDEwV0JNRGc9PS0teXVLQU92YlRWalJ4WnhpTXNzNkxSdz09--1f472148823725a4e1ad45c0c3b48618c6560be3; path=/; HttpOnly
Set-Cookie: __profilin=p%3Dt; path=/
X-Request-Id: 1cb6fc64-f7b9-45d9-9647-94fbedc44345
X-Runtime: 0.367952
X-UA-Compatible: IE=edge
答案 0 :(得分:0)
文档说:
Adds the specified field to a response header provided that the response
code equals 200, 201, 204, 206, 301, 302, 303, 304, or 307.
尝试在端口8080指令
上添加标头来源:http://nginx.org/en/docs/http/ngx_http_headers_module.html#add_header
答案 1 :(得分:0)
你的方向错误,因为指令proxy_set_header
将 nginx 的附加标题设置为后端,而不是来自后端+ nginx 到您的curl
客户端;这就是你没有看到它们的原因。
有两个选项可以将附加标题发送到客户端
add_header
指令但是那些标题将是'静态'标题(除了从后端发送,您可以根据需要构建它) - 使用cookie时这将是不正确的。要正确提供cookie,您应该使用ngx_http_userid_module
模块及其指令。
要跨子域共享Cookie,请使用
userid_domain .mysite.com;
# or ".discuss.mysite.com" for 4-th level of subdomains
userid_path /;