Отправить заявку

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

Понадобилось на одном проекте сделать определения страницы пользователя по гео-данным и анализу 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'] будет приходить реальный ИП-адрес пользователя.

Другие публикации