Лак обратного прокси, сервер 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 не подходит.

Другие вопросы по тегам