Configuration and Practice of Request Header Forwarding in Nginx Proxy Server

Nov 27, 2025 · Programming · 11 views · 7.8

Keywords: Nginx | Proxy Server | Request Header Forwarding

Abstract: This article provides an in-depth exploration of how to correctly forward custom request headers from Nginx proxy servers to backend applications. By analyzing common configuration errors, it focuses on the proper usage of the proxy_set_header directive, addressing issues encountered when using the headers-more-nginx-module. The article combines specific configuration examples to deeply analyze the working principles of Nginx proxy modules and offers complete solutions and best practice recommendations.

Overview of Nginx Proxy Request Header Forwarding Mechanism

In web application architecture, Nginx serves as a critical reverse proxy server responsible for request forwarding. When custom HTTP request headers need to be passed from the proxy server to backend applications, proper configuration is essential. This article provides a detailed analysis of Nginx proxy module's request header processing mechanism based on real-world cases.

Analysis of Common Configuration Errors

Many developers often confuse response header and request header settings when attempting to forward custom headers. In the provided case, the user tried to use the headers-more-nginx-module's more_set_headers directive to set request headers:

location / {
    proxy_pass                      http://mysite.com;
    proxy_set_header                Host http://mysite.com;;
    proxy_pass_request_headers      on;
    more_set_headers 'HTTP_Country-Code: $geoip_country_code';
}

The issue with this configuration is that the more_set_headers directive is primarily designed for setting response headers, not request headers. Even when attempting to use more_set_input_headers, due to module design limitations, the expected request header forwarding cannot be achieved.

Correct Request Header Forwarding Configuration

Nginx's built-in ngx_http_proxy_module provides dedicated functionality for request header forwarding. The correct configuration should use the proxy_set_header directive:

location / {
    proxy_pass                      http://example.com;
    proxy_set_header                Host example.com;
    proxy_set_header                HTTP_Country-Code $geoip_country_code;
    proxy_pass_request_headers      on;
}

The advantages of this configuration include:

Detailed Explanation of Configuration Parameters

The proxy_set_header directive works by adding specified header information to requests forwarded to backend servers. When using variables like $geoip_country_code, Nginx dynamically computes the variable value during request processing and sends it as the header value.

The proxy_pass_request_headers directive controls whether original client request headers are forwarded to backend servers. When set to on, Nginx preserves all headers sent by the client while adding new headers set via proxy_set_header.

Header Name Specifications and Considerations

When setting custom headers, attention must be paid to header name specifications. Although HTTP standards allow underscores, some servers or applications may have special handling for header names containing underscores. If headers are not properly recognized, consider:

underscores_in_headers on;

This configuration option allows Nginx to accept header names containing underscores, ensuring custom headers are processed correctly.

Extended Practical Application Scenarios

Based on supplementary reference articles, Nginx proxy header forwarding configuration patterns can be extended to various scenarios in practical applications:

location / {
    proxy_pass http://preview;
    proxy_redirect off;
    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-Custom-Referrer $x_custom_referrer;
}

This configuration pattern demonstrates how to forward multiple custom headers simultaneously, including client real IP addresses, forwarding chain information, and custom referrer information.

Best Practice Recommendations

When configuring Nginx proxy request header forwarding, the following best practices are recommended:

Conclusion

Request header forwarding in Nginx proxy servers is a fundamental yet crucial functionality. By correctly using the proxy_set_header directive, custom header information can be effectively passed to backend applications. Understanding the working principles and configuration syntax of Nginx proxy modules helps developers avoid common configuration errors and build more stable and efficient web application architectures.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.