Я принимаю Сайт WordPress на Heroku с Nginx. DNS стоит за CloudFlare.
Мои плагины WordPress сообщают IP-адреса Heroku вместо реальных 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.x
Heroku IP.
Есть ли способ установить REMOTE_ADDR
к реальным IP-адресам клиентов?
Спасибо
Просто добавьте эту строку:
proxy_set_header REMOTE_ADDR $remote_addr;