WordPress+Nginx取得真实IP

内容目录

如果 WordPress 运行在 Nginx 作为反向代理的后端,那么,WP会默认取得$_SERVER['remote_addr']的IP地址。其实这个IP地址是前端Nginx的IP地址,是不对的。如何才能使WordPress取得真实IP地址呢?

方法很简单,有几种,下面说下两种,推荐第二种:

首先,我们定义一下,假设运行Nginx Proxy的,为服务器A,而运行WordPress的,为服务器B(可以是Nginx, Apache ,Lighttpd,IIS等)。


1、使用HttpRealIpModule模块HTTP_X_REAL_IP

HttpRealIpModule模块不会默认安装到Nginx中。您需要配置Nginx,添加--with-http_realip_module选项重新编译安装一次Nginx。
然后在Nginx Proxy前端添加:

proxy_set_header X-Real-IP $remote_addr;

重新加载Nginx的配置:

nginx -s reload 

这时候,客户真实IP会保存在$_SERVER['HTTP_X_REAL_IP']变量中,如果使用 php 程序,输出: echo $_SERVER['HTTP_X_REAL_IP']; 就会得到用户的真实IP了。 修改WordPress根目录下的wp-config.php: 在第二行添加:

if (isset($_SERVER['HTTP_X_REAL_IP'])) {
    $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_REAL_IP'];
}

保存退出,完成!


2、使用HTTP_X_FORWARDED_FOR变量

不用安装其它模块。然后在Nginx Proxy前端,也就是服务器A添加:

proxy_set_header X-Forwarded-For $remote_addr;

重新加载Nginx的配置:

nginx -s reload

这时候,客户真实IP则会保存在$_SERVER['HTTP_X_FORWARDED_FOR']变量中, 修改WordPress根目录下的wp-config.php, 在第二行添加:

if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
    $_SERVER['REMOTE_ADDR'] = $ips[0];
}

保存退出,完成。

此时WP就可以获取到真实IP。可用添加评论测试。

WordPress若为安装在docker中,可以通过docker主服务器进入WordPress的安装根目录中去寻找文件wp-config.php并修改

  • 海报
  • 打赏
  • 分享
海报图正在生成中...
分享到...
请选择打赏方式
  • 微信
  • 支付宝

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注