nginx not setting REMOTE_ADDR properly?

Igor Sysoev is at rambler-co.ru
Thu Mar 5 22:53:24 MSK 2009


On Thu, Mar 05, 2009 at 09:18:11AM -0800, Mohammad Kolahdouzan wrote:

> It is working perfectly fine now, thanks. 
> 
> I was originally using $http_remote_addr since I noticed in the source code that any variable that starts with "http_" will have nginx retireve the variable from the headers_in, and also noticed that remote_addr is reserved to hold the IP of the actual connection which in my case, would naturally return the IP of the load balancer. But it didn't work when the "underscores_in_headers on" flag was not specified in the config file. 
> 
> So out of curiosity, if there is any variable in the header that is already reserved by nginx for another purpose, e.g., remote_port, we should use this underscores_in_headers to retrieve it, or did it work simply because the header had a underscore in it (i.e., REMOTE_ADDR) and the headers normally don't have underscores and the lack of the flag was causing Nginx to consider REMOTE_ADDR to be an invaluid header and ignore it?

$remote_addr and $http_remote_addr are different things:
$remote_addr is variable which value is a client's address taken
from socket options, while $http_remote_addr is variable which value
is client's HTTP request header "Remote-Addr" as any "$http_..."
variable: $http_user_agent, etc.

Usually underscores are not used in header name, therefore by default
nginx ignores headers with underscores in names.

> Thanks for the help,
> -M
> 
> 
> 
> 
> 
> ________________________________
> From: Igor Sysoev <is at rambler-co.ru>
> To: nginx at sysoev.ru
> Sent: Thursday, March 5, 2009 7:29:13 AM
> Subject: Re: nginx not setting REMOTE_ADDR properly?
> 
> On Wed, Mar 04, 2009 at 06:52:50PM -0800, Mohammad Kolahdouzan wrote:
> 
> > My nginx is getting requests through a (NetScaler) load balancer, and $remote_addr is returning the load balancer's IP and not the real user's IP (which the load balancer sets as REMOTE_ADDR in the header). Any other attribute I should use to get the real user's IP?
> 
> You should use $http_remote_addr and set:
> 
>   server {
>       underscores_in_headers  on;
> 
> 
> 
> -- 
> Igor Sysoev
> http://sysoev.ru/en/
> 
> 
>       

-- 
Igor Sysoev
http://sysoev.ru/en/





More information about the nginx mailing list