Nginx代理指令

时间:2015-03-25 18:25:25

标签: nginx

我尝试使用以下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

2 个答案:

答案 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    /;