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