Managing Headers in Requests with proxy_pass_request_headers in Nginx

nginx proxy pass request headers
25 March 2025

Understanding the concept of proxy_pass_request_headers in Nginx


In the world of web, proxies are powerful tools that allow us to manage traffic between clients and servers. One of the important modules in Nginx is the ngx_http_proxy_module, which enables us to pass requests to other servers. However, it's not enough to just send the request; sometimes, we need to also forward headers in these requests, which is where proxy_pass_request_headers comes in handy.


By using proxy_pass_request_headers, we can determine whether Nginx should send specific headers from the original request to the destination server or not. This feature allows granular details such as user, cookies, and other related items to be forwarded to the target server. As a result, the target server can respond appropriately based on these headers.


Imagine you have an application that needs to connect to an external API. In this scenario, it's essential that you send specific headers, like authentication tokens, to the proxy server. proxy_pass_request_headers provides this capability so you can selectively choose which headers to pass and, in turn, maintain additional security.


Therefore, using proxy_pass_request_headers helps you have better control over web traffic and avoid issues that could arise from transferring data unnecessarily. In particular, this capability is crucial at times when you need to interact with multiple APIs, where each may require different headers, making it very useful.


Code Example


proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

Line-by-Line Explanation


Line: proxy_pass http://backend;
This line specifies the proxy destination, which can be another server.


Line: proxy_set_header Host $host;
Here, the Host header is set to the original request’s Host value so the target server knows where the request is coming from.


Line: proxy_set_header X-Real-IP $remote_addr;
This line forwards the real IP of the client to the backend server so that it can identify the original requester.


Line: proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
This line sends the list of IP addresses that have traversed the request, which is commonly used for traffic analysis.


Line: proxy_set_header X-Forwarded-Proto $scheme;
This line sends the original protocol (HTTP or HTTPS) to the target server, which is crucial for security issues.


FAQ

?

What exactly does proxy_pass_request_headers do?

?

Why should I use proxy_pass_request_headers?

?

Can I remove specific headers with proxy_pass_request_headers?

?

How can I add new headers with proxy_pass_request_headers?