TransWikia.com

How do I pass headers from nginx X-Accel-Redirect back to the browser?

Server Fault Asked by Jason Cohen on December 27, 2020

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

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;

Answered by Koen. on December 27, 2020

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.

Answered by Sašo on December 27, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP