Лак обратного прокси, сервер Apache, IP-адрес не работает последовательно
Это мой раздел с конфигурационным файлом 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. Как видите, я сделал это точно.
Любая помощь будет принята с благодарностью.
1 ответ
Ваш код для установки заголовка X-Forwarded-For должен работать, если он есть только в подпрограмме vcl_recv. Посмотрите эту блок-схему Varnish о том, как запрос будет обрабатываться различными подпрограммами.
Вы установили "RPAFsethostname" в "Вкл". Насколько я знаю, это для использования заголовка X-Host вместо заголовка Host. Пожалуйста, проверьте, требуется ли это для вашей установки Varnish. Обычно заголовок X-Host не используется / не устанавливается.
В любом случае, идея использования mod_rpaf состоит в том, чтобы заменить значение Apache REMOTE_ADDR значением X-Forwarded-For. Таким образом, вам не нужно менять свои сценарии, аутентификацию на основе IP или ведение журнала. Для вашего PHP-скрипта я рекомендую использовать $_SERVER['REMOTE_ADDR'].
Если это не решит вашу проблему, деактивируйте модуль mod_rpaf. Помимо сценариев, использующих $_SERVER['REMOTE_ADDR'], аутентификация на основе IP или регистрация всего остального должна работать нормально. Если проблема не исчезла, что-то еще в вашей настройке Varnish/Apache не подходит.