Это раздел моего файла конфигурации vcl, связанный с переадресацией IP:
sub vcl_recv {
remove req.http.X-Forwarded-For;
set req.http.X-Forwarded-For = client.ip;
.... (other configuration)
}
sub vcl_pipe {
set req.http.connection = "close";
if (req.http.X-Forwarded-For) {
set req.http.X-Forwarded-For = req.http.X-Forwarded-For;
} else {
set req.http.X-Forwarded-For = regsub(client.ip, ":.*", "");
}
}
sub vcl_pass {
set req.http.connection = "close";
if (req.http.X-Forwarded-For) {
set req.http.X-Forwarded-For = req.http.X-Forwarded-For;
} else {
set req.http.X-Forwarded-For = regsub(client.ip, ":.*", "");
}
}
И я установил mod_rpaf и соответствующие настройки конфигурации на httpd.conf:
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 10.0.0.1 67.23.31.16
RPAFheader X-Forwarded-For
Теперь я попытался использовать $_SERVER["HTTP_X_FORWARDED_FOR"]
внутри моего php, чтобы получить IP-адрес. Это работает в первый раз, а потом я начинаю терять смысл. Опять же, если я попробую через некоторое время, скажем, через минуту, я получу снова впервые.
Таким образом, в основном он не работает последовательно или работает случайным образом, или, если быть точным, работает только один раз и не работает еще несколько раз, снова и снова. Очень странно. Такое ощущение, что что-то неправильно настроено. Я потратил довольно много времени на поиск в Google. Везде рекомендуют добавлять x-forward-for
и установка модуля mod_rpaf. Как видите, я сделал именно это.
Любая помощь будет принята с благодарностью.
Ваш код для установки заголовка X-Forwarded-For должен работать, если он у вас есть только в vcl_recv подпрограмма. Посмотри это Схема производства лака того, как запрос будет обрабатываться разными подпрограммами.
Вы установили "RPAFsethostname" на "Вкл". Насколько я знаю, это для использования заголовка X-Host вместо заголовка Host. Пожалуйста, проверьте, требуется ли это для вашей установки Varnish. Обычно заголовок X-Host не используется / не устанавливается.
В любом случае идея использования mod_rpaf состоит в том, чтобы заменить значение REMOTE_ADDR Apache значением X-Forwarded-For. Таким образом, вам не нужно менять свои сценарии, аутентификацию на основе IP или ведение журнала. Для вашего PHP-скрипта я рекомендую использовать $ _SERVER ['REMOTE_ADDR'].
Если это не решит вашу проблему, отключите модуль mod_rpaf. Помимо скриптов, использующих $ _SERVER ['REMOTE_ADDR'], аутентификация на основе IP или регистрация всего остального должны работать нормально. Если проблема не исчезла, что-то еще в вашей настройке Varnish / Apache не подходит.