nginx passing back custom header
I have the following example
location / {
proxy_read_timeout 2000;
proxy_next_upstream error;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass_header X_CUSTOM_HEADER;
proxy_redirect off;
proxy_max_temp_file_size 0;
proxy_pass https://prod;
break;
}
Now when i use the following curl line
curl --head -H "X_CUSTOM_HEADER: foo" http://domain.com/api/test
Now that does not work.. the apache/php on the backend doesn't see the header. If I bypass nginx it works
curl --head -H "X_CUSTOM_HEADER: foo" http://web1.domain.com/api/test
Solution 1:
You should use underscores_in_headers on
directive which is off by default.
Solution 2:
You should use proxy_set_header
for all headers you wish to forward to the backend servers. So instead of proxy_pass_header ...
line:
proxy_set_header X_CUSTOM_HEADER $http_x_custom_header;
Solution 3:
The above didn't work for me either so I used proxy_pass_header
. See the Nginx Wiki about proxy_pass_header here.
If your custom header is device_id
add proxy_pass_header device_id;
to your Proxy block.
If you are using customheaders with an underscore in it (like I am) be sure to make sure you have underscores_in_headers on
in your Nginx Config.