On proxy my nginx show wrong ip (private)

Hello, Im using FreeBSD and jail. I have main nginx server in jail (ip
192.168.1.2). Second www server is apache22 (192.168.1.3).

Port 80 from 192.168.1.2 is forwarding to public IP.

Problem is in this that php scripts from apache (192.168.1.3) showing
client IP from nginx (192.168.1.2). For example: phpBB showing on line
users and ips 192.168.1.2.

Its my settings in nginx (192.168.1.2):
— START—
server {
listen 80;
server_name www.skuter-forum.pl skuter-forum.pl;
access_log /var/log/nginx/skuter-forum.pl.access.log;

    if ($host = 'www.skuter-forum.pl' ) {
                                rewrite ^/(.*)

http://skuter-forum.pl/$1 permanent;
}

location / {
proxy_pass http://192.168.1.3:80;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
}
}

— END —

How set real clients ips?

Posted at Nginx Forum:

On Tue, Nov 23, 2010 at 01:45:02PM -0500, dong wrote:

Hi there,

Problem is in this that php scripts from apache (192.168.1.3) showing
client IP from nginx (192.168.1.2). For example: phpBB showing on line
users and ips 192.168.1.2.

The php scripts are probably using REMOTE_ADDR, which is the address of
the client connecting to Apache, which is nginx.

         }

Aside – there’s a better way of doing that.

location / {
proxy_pass http://192.168.1.3:80;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
}
}

— END —

How set real clients ips?

You have told nginx to send the http header X-Real-IP with this
value. That’s pretty much all you can do on the nginx side. So either
get your Apache to set that value as REMOTE_ADDR for the php scripts,
or get the php scripts to read HTTP_X_REAL_IP instead of REMOTE_ADDR.

Good luck,

f

Francis D. [email protected]