将 $REMOTE_ADDR 设置为真实客户端 IP

将 $REMOTE_ADDR 设置为真实客户端 IP

我正在举办WordPress 网站在 Heroku 上使用 Nginx。DNS 位于 CloudFlare 后面。

我的 WordPress 插件报告的是 Heroku IP,而不是真实的客户端 IP。

我有以下 Nginx 规则:

location / {
    try_files $uri $uri/ /index.php?$args;

    proxy_set_header    X-Real-IP       $remote_addr;
    proxy_set_header    Host            $host;
    proxy_set_header    X-Forwarded-For $http_cf_connecting_ip;
}

# Allow for internal Heroku router - 10.x.x.x
set_real_ip_from  10.0.0.0/24;

# Allow for external CloudFlare proxies - https://www.cloudflare.com/ips
set_real_ip_from 199.27.128.0/21;
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 104.16.0.0/12;

# Recursively process X-Forwarded-For header
real_ip_recursive on;
real_ip_header    X-Forwarded-For;

完整配置可以在https://github.com/wphuman/heroku-buildpack-php/tree/master/conf/nginx

每当 WordPress 插件尝试读取远程地址标头时$_SERVER['REMOTE_ADDR'],它们都会读取10.x.x.xHeroku IP。

有什么方法可以设置REMOTE_ADDR为真实客户端 IP?

谢谢

答案1

只需添加这一行:

proxy_set_header REMOTE_ADDR $remote_addr;

相关内容