Nginx заменит REMOTE_ADDR на X-Forwarded-For

Я совершенно новичок в Nginx, и, похоже, все так запутанно. Я отлично настроил сервер, но проблема в том, что мой сервер защищен с использованием HTTP-прокси; вместо того, чтобы регистрировать IP-адреса реальных пользователей, он регистрирует IP-адрес прокси-сервера.

Я пытался сделать $_SERVER['REMOTE_ADDR']; до $_SERVER['X-Forwarded-For']; но я получаю неопределенную ошибку индекса, поэтому я предполагаю, что мне нужно определить X-Forwarded-For в Nginx? Но я не знаю, как это сделать, у меня простая настройка, это просто Nginx с PHP. Ни больше ни меньше.

Я искал по всему Интернету, но на самом деле не могу найти некоторую информацию, которая была бы понятной.

У меня есть доступ к исходному коду, если это немного помогает. Я пробовал много решений, но безуспешно.

Правильный способ сделать это – установить конфигурацию real_ip_header в nginx.

Пример с доверенным HTTP-прокси IP:

 set_real_ip_from 127.0.0.1/32; real_ip_header X-Forwarded-For; 

Таким образом, $ _SERVER ['REMOTE_ADDR'] будет правильно заполнен в PHP fastcgi.

Ссылка для документации – nginx.org

$http_x_forwared_for может содержать несколько IP-адресов, где первым должен быть клиентский ip. REMOTE_ADDR должен быть только клиентским ip.

Поэтому, используя регулярное выражение в вашем nginx.conf , вы можете установить REMOTE_ADDR в первый ip из $http_x_forwarded_for так:

  set $realip $remote_addr; if ($http_x_forwarded_for ~ "^(\d+\.\d+\.\d+\.\d+)") { set $realip $1; } fastcgi_param REMOTE_ADDR $realip; 

Я решил свою проблему, так как PHP фильтруется через FastCGI, я просто добавил быстрый параметр CGI, который устанавливает REMOTE_ADDR в переменную http_x_forwarded_for , поэтому что-то похожее на это:

 fastcgi_param REMOTE_ADDR $http_x_forwarded_for; 

Я была такая же проблема. Вы правы, вы должны добавить параметр fastcgi param: location ~ \.php$ { fastcgi_pass unix:/var/run/php5-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param CUSTOM_PARAM "CUSTOM_VALUE"; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; fastcgi_param REMOTE_ADDR $http_x_real_ip; } location ~ \.php$ { fastcgi_pass unix:/var/run/php5-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param CUSTOM_PARAM "CUSTOM_VALUE"; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; fastcgi_param REMOTE_ADDR $http_x_real_ip; } location ~ \.php$ { fastcgi_pass unix:/var/run/php5-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param CUSTOM_PARAM "CUSTOM_VALUE"; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; fastcgi_param REMOTE_ADDR $http_x_real_ip; } По умолчанию параметр REMOTE_ADDR указан в /etc/nginx/fastcgi_params : fastcgi_param REMOTE_ADDR $remote_addr; Это не значение, которое происходит из заголовка прокси-прохода.
Убедитесь, что вы изменили его в файле fastcgi_params или установите его после инструкции include.