Странная штука. Мой реальный IP видно в HTTP_X_REAL_IP и HTTP_X_FORWARDED_FOR, но не видно в REMOTE_ADDR. По идеи IP ведь должен показываться в REMOTE_ADDR, правильно? У меня плагин фаерволла к Wordpress видит всех как 127.0.0.1 из-за этого. На сервере стоит Apache2 и Nginx как его прокси. На Апач установлен libapache2-mod-rpaf. В чём может быть проблема? Код (Text): PHP version: 7.0.9-1+deb.sury.org~trusty+1 [SERVER_SOFTWARE] => Apache/2.4.7 (Ubuntu) [REQUEST_URI] => /wp-admin/options-general.php?page=cerber-settings&tab=tools [HTTPS] => on [HTTP_HOST] => example.com [HTTP_X_REAL_IP] => 46.39.34.167 [HTTP_X_FORWARDED_FOR] => 46.39.34.167 [HTTP_CONNECTION] => close [HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0 [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 [HTTP_ACCEPT_LANGUAGE] => ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3 [HTTP_ACCEPT_ENCODING] => gzip, deflate, br [HTTP_REFERER] => https://example.com/wp-admin/options-general.php?page=cerber-settings&tab=hardening [HTTP_X_COMPRESS] => 1 [HTTP_UPGRADE_INSECURE_REQUESTS] => 1 [PATH] => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin [SERVER_SIGNATURE] => Apache/2.4.7 (Ubuntu) Server at example.com Port 80 [SERVER_NAME] => example.com [SERVER_ADDR] => 127.0.0.1 [SERVER_PORT] => 80 [REMOTE_ADDR] => 127.0.0.1 [DOCUMENT_ROOT] => /home/example.com/html [REQUEST_SCHEME] => http [CONTEXT_PREFIX] => [CONTEXT_DOCUMENT_ROOT] => /home/example.com/html [SERVER_ADMIN] => maestro.magnifico@mail.ru [SCRIPT_FILENAME] => /home/example.com/html/wp-admin/options-general.php [REMOTE_PORT] => 59044 [GATEWAY_INTERFACE] => CGI/1.1 [SERVER_PROTOCOL] => HTTP/1.0 [REQUEST_METHOD] => GET [QUERY_STRING] => page=cerber-settings&tab=tools [SCRIPT_NAME] => /wp-admin/options-general.php [PHP_SELF] => /wp-admin/options-general.php [REQUEST_TIME_FLOAT] => 1478604051.122 [REQUEST_TIME] => 1478604051
Думаю что Nginx подменяет IP. Ведь для Apache запрос пришел с локальной машины. Мутите конфиги nginx Собственно здесь решение https://easyengine.io/tutorials/nginx/forwarding-visitors-real-ip/
Я пробовал это решение, не помогло. В Nginx в fastcgi_params у меня уже было прописано: Код (Text): fastcgi_param REMOTE_ADDR $remote_addr; А ещё подрублен такой конфиг: Код (Text): proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; Так вот, через этот конфиг $remote_addr передаётся в X-Real-IP, как видите. А в fastcgi_params почему-то та же самая переменная не работает. В конфиги виртуальных хостов тоже пробовал такое прописывать, например вот мой стандартный конфиг: Код (Text): server { listen 80; listen [::]:80; server_name exapmle.com www.exapmle.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name exapmle.com www.exapmle.com; ssl_certificate /etc/nginx/exapmle.com/public.crt; ssl_certificate_key /etc/nginx/exapmle.com/private.key; ssl on; ssl_prefer_server_ciphers on; root /home/exapmle.com/html; error_log /home/exapmle.com/logs/nginx.error.log crit; access_log /home/exapmle.com/logs/nginx.access.log; location / { proxy_pass http://127.0.0.1:81; } location ~* \.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|docx|xlsx)$ { root /home/exapmle.com/html; expires 6h; } location ~ \.php$ { fastcgi_param REMOTE_ADDR $http_x_real_ip; #...other rules } proxy_connect_timeout 1000; proxy_send_timeout 1000; proxy_read_timeout 1000; send_timeout 1000; }
Код (Text): set_real_ip_from 127.0.0.1/32; real_ip_header X-Forwarded-For; А так пробовали? http://stackoverflow.com/a/27294535