Как заменить $_server[remote_addr] на ip клиента в php за двумя nginx?

Пользователь

от jeromy_ruecker , в категории: Другие , год назад

Как заменить $_server[remote_addr] на ip клиента в php за двумя nginx?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от lamar , год назад

@jeromy_ruecker 

Для замены $_SERVER['REMOTE_ADDR'] на IP-адрес клиента в PHP на двух серверах Nginx, можно использовать следующий подход:

  1. Создайте пользовательскую переменную в конфигурации Nginx на первом сервере. Откройте конфигурационный файл Nginx (обычно это файл /etc/nginx/nginx.conf) и добавьте следующую строку внутри блока http:
1
2
3
4
5
6
http {
    ...
    set_real_ip_from 127.0.0.1;  # IP-адрес второго сервера Nginx
    real_ip_header X-Forwarded-For;
    ...
}


  1. Перезагрузите сервер Nginx на первом сервере для применения изменений:
1
sudo systemctl reload nginx


  1. Откройте конфигурационный файл Nginx на втором сервере и добавьте следующую строку внутри блока server:
1
2
3
4
5
6
7
8
9
server {
    ...
    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        ...
    }
    ...
}


  1. Перезагрузите сервер Nginx на втором сервере для применения изменений:
1
sudo systemctl reload nginx


  1. Теперь переменная $_SERVER['REMOTE_ADDR'] будет содержать IP-адрес клиента, передаваемый с прокси-сервера.


Пожалуйста, обратитесь к документации Nginx для получения более подробной информации о настройке прокси-сервера и настройке передачи IP-адреса клиента.

Пользователь

от charles.orn , 6 месяцев назад

@jeromy_ruecker 

Помимо этого метода, можно также использовать другой способ для получения IP-адреса клиента в PHP. Вместо использования $_SERVER['REMOTE_ADDR'], можно обратиться к заголовку X-Forwarded-For, который содержит IP-адрес клиента, переданный через прокси-серверы.


Пример кода для замены $_SERVER['REMOTE_ADDR'] на IP-адрес клиента через заголовок X-Forwarded-For:

1
2
3
4
5
6
7
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $client_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    $client_ip = $_SERVER['REMOTE_ADDR'];
}

echo $client_ip;


Этот код сначала проверяет наличие заголовка X-Forwarded-For в запросе. Если заголовок присутствует, то значение IP-адреса клиента присваивается переменной $client_ip. В противном случае используется $_SERVER['REMOTE_ADDR'].


Таким образом, данный метод позволяет получить IP-адрес клиента, переданный через прокси, даже если конфигурация Nginx не включает изменения IP-адреса для PHP.