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

Обратный прокси Varnish, бэкэнд 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. Как видите, я сделал именно это.

Любая помощь будет принята с благодарностью.

Ваш код для установки заголовка 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 не подходит.