nginx反向代理获取用户真实ip

    Linux yeakyang 430次浏览 0个评论 扫描二维码

    nginx做反向代理时,默认的配置后端获取到的ip都是来自于nginx,那么如何转发用户的真实IP到后端程序呢?
    当前端使用nginx代理,后端使用php-fpm时,如果还是使用$_SERVER[‘REMOTE_ADDR’],那么php程序获取到的是nginx的ip地址,而不是用户的真实ip。

    在nginx的配置文件中加入下面三个指令,这样后端php就可以使用$_SERVER[‘HTTP_X_REAL_IP’]获取到访客的ip。

    经过多层代理后 $http_x_forwared_for 会含有多个ip,其中第一个ip是客户端的ip,REMOTE_ADDR只能是客户端的ip,所以可以用正则提取 $http_x_forwarded_for的第一个ip给REMOTE_ADDR:

    set $realip $remote_addr;
      if ($http_x_forwarded_for ~ "^(d+.d+.d+.d+)") {
        set $realip $1;
      }
      fastcgi_param REMOTE_ADDR $realip;

     


    喜欢 (0)
    发表我的评论
    取消评论
    表情 贴图 加粗 删除线 居中 斜体 签到

    Hi,您需要填写昵称和邮箱!

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址