启用Nginx反向代理(CDN)后,PHP获取真实IP

最近博客加了一层反向代理后,发现PHP无法获取真实IP,来源IP都变成了反向代理服务器IP,这里记录一下。

反向代理服务器配置(IP:192.168.1.2)

先在反代这一层获取客户端IP($remote_addr),然后再通过X-Real-IP传递给源站。

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

源站配置

由于源站的nginx access日志也需要获取真实IP,配置如下。其中192.168.1.2是nginx反向代理服务器的IP

#获取真实IP
set_real_ip_from 192.168.1.2;
real_ip_header  X-Forwarded-For;
real_ip_recursive on;

最后PHP获取真实IP

直接取HTTP_X_REAL_IP参数即可,代码如下。

<?php
    $ip = getenv('HTTP_X_REAL_IP');
    echo $ip;
?>

标签: nginx 配置 nginx

发表评论: