Как заставить Nginx передавать Apache реальный IP пользователя

Nginx не передает Apache реальный IP пользователя-1

Понадобилось на одном проекте сделать определения страницы пользователя по гео-данным и анализу php переменной HTTP_ACCEPT_LANGUAGE для корректного направления домена на язык пользователя. Скрипт был написан и успешно протестирован на работоспособность на локальном сервере. После загрузки на сервер и внедрения – эффекта не было. При анализе выяснилось, что IP-адрес пользователя в переменной $_SERVER['REMOTE_ADDR'] был 127.0.0.1

Apache определяет IP юзера как 127.0.0.1

NGinx стоит как прокси для веб-сервера Apache, чтобы отдавать статику не запуская воркеров индейца.

Есть как минимум два варианта решения этого вопроса.
Можно поставить модуль для апача rpaf или же воспользоваться средствами самого nginxa.

В конфиг прописываем в раздел server

server { 
    listen artkiev.com:80;
	server_name artkiev.com; 
    location / {
        proxy_pass http: //artkiev.com;
    }  
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

Т.е. нам необходимо прописать корректные заголовки, а именно:

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

После этого перегрузить nginx:

service nginx restart

и после этого в переменную $_SERVER['REMOTE_ADDR'] все равно будет приходить 127.0.0.1, но в $_SERVER['HTTP_X_REAL_IP'] будет приходить реальный ИП-адрес пользователя.

Автор: Unknow, Источник
 

Добавить комментарий


Защитный код
Обновить