在使用Nginx作为反向代理时候,必然面临对Cookie处理。
典型例子:
a、一些网站要求登录,大部分情况下,用户登录信息都依靠Cookie机制。
b、一些网站使用了CloudFlare 做DDOS防护,而CloudFlare的防护机制之一也是依赖于Cookie机制。
在Nginx中,与Cookie相关的指令包括如下几个:proxy_cookie_domain、proxy_pass_header 、proxy_set_header Cookie $http_cookie
其中proxy_cookie_domain、proxy_pass_header 适用于上游服务器的响应报文(repsone)
proxy_set_header Cookie $http_cookie适用于请求报文(request)
proxy_cookie_domain domain replacement;
proxy_cookie_domain的作用是将上游服务器(反向代理服务器的目标服务器)的响应报文。
例如 proxy_cookie_domain .target.com .mydomain.com 指令是 将 Cookie 从Domain=.target.com转为 Domain=.mydomain.com
proxy_pass_header Set-Cookie 的允许反向代理服务器对浏览器的设置cookie,由于缺省值为on,因此可以不设置。
proxy_set_header Cookie $http_cookie
获取浏览器向反向代理服务器的请求cookie($http_cookie),并设置为反向代理服务器向上游服务器的请求Cookie。
下面以反向代理CloudFlare防护的网站为例,说明使用Nginx的Cookie指令使用。
使用Nginx反向代理CloudFlare防护网站的典型流程
Nginx典型设置
proxy_pass https://target.com ; proxy_set_header Host "target.com"; proxy_set_header Referer "https://target.com"; proxy_set_header Cookie $http_cookie; set $domain ""; if ($host ~* "(.*)(\..*)(\..*)" ) { set $domain $2$3; } proxy_cookie_domain .target.com $domain; proxy_pass_header Set-Cookie;