How can I do nginx rewrite?

How to rewrite the domain part of Set-Cookie in a nginx reverse proxy?

Tobia at Server Fault Visit the source

Was this solution helpful to you?

Other answers

The above answer works fine with multiple Set-Cookie response headers, but it fails if there's just one. As agentzh points out at the end of the referenced thread, if type(cookies) ~= "table" then cookies = {cookies} end is needed to handle that case. Here's the whole thing: 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 '; }

lhagan

This question came up in the nginx mailing list [1]. There's no way to directly do this in nginx. You have to resort to using the ngx_lua module (>=v0.3.1). The user "agentzh" has an example of what this would look like inlined in the config file: server_name external.domain.com; location / { proxy_pass http://backend.int/; header_filter_by_lua ' local cookies = ngx.header.set_cookie if not cookies then return 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 '; } [1] http://nginx.2469901.n2.nabble.com/Rewriting-the-domain-part-of-Set-Cookie-in-a-proxy-pass-td6453554.html

shamer

Related Q & A:

Just Added Q & A:

Find solution

For every problem there is a solution! Proved by Solucija.

  • Got an issue and looking for advice?

  • Ask Solucija to search every corner of the Web for help.

  • Get workable solutions and helpful tips in a moment.

Just ask Solucija about an issue you face and immediately get a list of ready solutions, answers and tips from other Internet users. We always provide the most suitable and complete answer to your question at the top, along with a few good alternatives below.