美文网首页Nginx
Nginx反向代理获取客户端IP

Nginx反向代理获取客户端IP

作者: 词穷又词贫 | 来源:发表于2017-05-08 14:09 被阅读1272次

    前端采用Nginx作为代理服务器,代理至后端Real-Server。
    X-Real-IP:客户端IP 通常是设置 $remote-addr
    X-Forwarded-For:多级代理ip,(包含客户端ip,一级代理ip,....) 通常是设置 $proxy_add_x_forwarded_for 也可以设置成为 $remote-addr

    Real-Server为Apache:

    nginx:
    proxy_set_header Host $Host;
    proxy_set_header X-Real-IP $remote_addr;
    apache:
    日志格式:
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    修改为:
    LogFormat "%{X-Real-IP}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    

    Real-Server为Nginx:

    后端nginx需要在编译安装是添加:--with-http_realip_module,前段可以不需要

    前端(反向代理):
            location / {
            proxy_pass  http://pma;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $Host;
            proxy_redirect     off;
            }
    后端(Real-Server):
            set_real_ip_from "192.168.1.154";
            real_ip_header X-Forwarded-For;
            real_ip_header X-Real-IP;
            real_ip_recursive on;
    

    因为只有一级代理,其实X-Forwarded-For 与 X-Real-IP值都是一样的。

    在说清楚一点

    如果架构是nginx ---->nginx (nginx反向代理至nginx)
    nginx反代:

    proxy_set_header X-Real-IP $remote_addr;
    

    nginx Real-Server:

    set_real_ip_from "192.168.1.154";   //此IP是前端反代至后端通信IP
    默认的,后端服务器会查找X-Real-IP此变量值作为远程客户端IP
    
    如果前段反代变量是X-RealA-IP,后端需要跟着配置:
    real_ip_header X-RealA-IP;    //指定获取客户端IP的头部变量

    相关文章

      网友评论

        本文标题:Nginx反向代理获取客户端IP

        本文链接:https://www.haomeiwen.com/subject/ytuktxtx.html