Tob*_*bia 31 rewrite nginx reverse-proxy cookies
我有一个简单的 nginx 反向代理:
server {
server_name external.domain.com;
location / {
proxy_pass http://backend.int/;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是Set-Cookie响应头包含;Domain=backend.int,因为后端不知道它正在被反向代理。
如何让 nginx 重写Set-Cookie响应头的内容,替换;Domain=backend.int为;Domain=external.domain.com?
Host在这种情况下,不更改传递标头不是一种选择。
Apache httpd有此功能已有一段时间了,请参阅ProxyPassReverseCookieDomain,但我似乎找不到在 nginx 中执行相同操作的方法。
小智 28
从 1.1.15 开始,添加了 proxy_cookie_domain 选项以解决此问题。
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cookie_domain
小智 5
@shamer 的答案适用于多个Set-Cookie响应标头,但如果只有一个响应标头则失败。正如 agentzh 在引用线程的末尾指出的那样,if type(cookies) ~= "table" then cookies = {cookies} end需要处理这种情况。
这是整件事:
location / {
proxy_pass http://backend.int/;
header_filter_by_lua '
local cookies = ngx.header.set_cookie
if not cookies then return end
if type(cookies) ~= "table" then cookies = {cookies} end
local newcookies = {}
for i, val in ipairs(cookies) do
local newval = string.gsub(val, "([dD]omain)=[%w_-\\\\.]+",
"%1=external.domain.com")
table.insert(newcookies, newval)
end
ngx.header.set_cookie = newcookies
';
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
94453 次 |
| 最近记录: |