I'm using the nginx X-Accel-Redirect feature where a proxied backend (A) can "internally redirect" nginx to reprocess a new URI (B) as if that were the one originally given by the client browser.

It works great in making request B (also proxied)and returning B's resulting headers back to the client browser. So far so good.

But also I have some headers from A which I'd like to pass along too. In other words, merge a handful of headers from A in with the result from B.

How can I do this? I've tried

add_header  X-My-Header  $http_x_my_header;

But that $http_x_my_header variable is empty, presumably because the original request didn't have it. I've also tried $upstream_x_my_header but that's empty too. I've tried things like proxy_pass_header X-My-Header; but no.

2 Answers 2


After trial and error, I found the $upstream_http_... headers to be working when first assigned to a variable;

So with your example that would become something like this;

  set $my_header '$upstream_http_x_my_header';
  add_header  X-My-Header  $my_header;

According to nginx manual for proxy_set_header:

If value is empty string, then header will not be sent to upstream.

Try using proxy_set_header X-My-Header "OK" or perhaps a variable you'd like to use as value. That should pass it to the proxy as well as the user.

  • proxy_set_header is for passing headers to the upstream; the question is about using the headers from the upstream.
    – Koen.
    May 7, 2019 at 10:26

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.