Вообщем я что то внятной инфы по X_FORWARDED_FOR не нашёл. Вроде как браузер записывает туда свой ip адрес, и даже если клиент юзает прокси, то сервер из этого заголовка узнает истинный ip адрес. Непонятным осталось, почему на практике это поле заголовка содержит несколько ip адресов ?
Прокси может туда записать что угодна, некоторые туда вписывают реальный IP, но на этот заголовок нельзя полагаться, туда можно прописать всё что угодно.
Этот заголовок предназначен для протоколирования цепочки прокси. Если, например, у тебя nginx в роли прокси перед apache, то в этом заголовке последний адрес тот, который был REMOTE_ADDR для nginx-а. Цепочка целиком недостоверна, но крайний адрес ставит nginx и ему ты можешь верить И если поставить модуль apache mod_rpaf, то он будет этот адрес подставлять снова в REMOTE_ADDR. В скриптах ничего менять не придется.
вообще браузер не заполняет это поле. ему просто нужды нет так как он и есть клиент. а цепочка прокси и даже сам веб-сервер могут это поле объявить и заполнить.