Nginx代理模式下 log-format 获取客户端真实IP

一:环境描述
A:    windows client       10.43.2.213
B:    Nginx  proxy        10.43.2.11
C:    Nginx  web-server     10.43.2.54
其中,A,B,C三台主机,A是通过windows中的浏览器,B是Nginx代理服务器,C是用Nginx做的web服务器,访问web的流程如下:  A————>B————>C
二:修改Nginx web-server配置文件如下:
1
2
3
4
5
6
7
8
9
10
11
server {
    listen       80;
    server_name  localhost;
    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        set_real_ip_from 10.43.2.11;
        real_ip_header X-Real-IP;
    }



1
2
增加 set_real_ip_from 10.43.2.11;告诉web-server从哪里获得客户端地址
   real_ip_header X-Real-IP;存储X-Real-IP变量名称



1
2
3
4
5
6
7
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$http_x_forwarded_for_$remote_addr-$remote_user[$time_local]'
                      '"$request"$status $body_bytes_sent'
                      '"$http_referer" "$http_user_agent"';
    access_log  /var/log/nginx/access.log  main;



log_format 制定Log的记录格式。
如果不告诉web-server从哪里获取客户端的IP地址的话,web-server默认只能获得代理服务器的IP地址。
三:效果演示

在A上的浏览器访问:  
查看日志结果如下:/var/log/nginx/access.log  
   其中第一个红框内的是为增加set_real_ip_from和real_ip_header的日志记录结果,下边的是增加后的结果,从结果分析可以看的web-server已经能够准确获得远程客户端的真实IP地址了。

猜你喜欢

转载自hugoren.iteye.com/blog/2210267