Назад | Перейти на главную страницу

Странное поведение установки REMOTE_ADDR между Apache, Nginx и AWS ELB

Я столкнулся со странной проблемой, и мне любопытно, сталкивались ли с ней и другие. и если есть что-то, что можно сделать ..

У нас есть установка, в которой у нас есть несколько машин AWS EC2 Linux, сидящих за ELB. Машины EC2 работают под управлением Nginx. Будем называть их моими производственными машинами (потому что они есть!)

У меня также есть облачная машина Rackspace с Apache. Полностью отдельный. Назовем это тестовым сервером.

Теперь в Сингапуре есть интернет-провайдер, который, похоже, направляет трафик через прозрачный прокси или что-то в этом роде, и когда вы выполняете проверку IP, IP часто меняется.

На самом деле я заметил, что когда я проверяю http://www.whatismyip.com, ip кажется стабильным (не меняется) после обновлений. Но, http://www.whatismyipaddress.com, при обновлении IP меняется! (так что мой провайдер делает странные вещи).

Теперь, возвращаясь к своей настройке, я заметил несколько вещей:

  1. Проверка переменной REMOTE_ADDR из PHP при подключении к одной производственной машине Nginx (в обход балансировщика нагрузки) устанавливается на стабильный IP-адрес, который действительно изменяется.

  2. При проверке переменной REMOTE_ADDR из PHP при подключении к тестируемому серверу Apache устанавливается IP-адрес, который изменяется при обновлении.

  3. Проверяя заголовки при подключении к производственным машинам nginx через ELB, ELB устанавливает HTTP_X_FORWARDED_FOR на стабильный IP.

Кто-нибудь испытывал такое странное поведение? Я ничего не могу сделать? И какому IP мне "доверять"? (тот, который дает Apache, или тот, который дает ELB и Nginx?)

Спасибо!

Крис

HTTP_X_FORWARDED_FOR это самый надежный способ получить IP-адрес пользователя, когда ваше приложение находится за обратным прокси-сервером / балансировщиком нагрузки. Однако я не знаю, что вы подразумеваете под «доверием»? HTTP_X_FORWARDED_FOR это HTTP-заголовок, который может быть легко изменен клиентом или любой системой между вами и клиентом. Вы не хотите использовать его для чего-либо вроде аутентификации.