В настоящее время у меня есть следующие настройки конфигурации:
Балансировщик нагрузки для кэшей Varnish (серверы x2) на веб-узлы (серверы x3) (Apache, PHP)
В настоящее время я установил req.http.X-Forwarded-For = client.ip
в Varnish, который должен передавать IP-адрес узлам Apache. Узлы Apache также запускают mod_rpaf, который должен помочь серверу использовать X-Forward-IP вместо IP-адресов кеша Varnish.
Эта часть мне подходит, но я столкнулся с другой проблемой. В настоящее время только подсистема балансировки нагрузки принимает запросы и запрашивает кеши Varnish для страниц. Это означает, что Apache регистрирует только IP-адрес балансировщика нагрузки. Однако балансировщик нагрузки также отправляет заголовок X-Forwarded-For в запросе Varnish. Как я могу передать этот заголовок на серверы Apache?
Если вас интересует только "настоящий" IP-адрес клиента, выберите req.http.X-Forwarded-For = client.ip
Полностью выкладывалась из Лака.
В этом случае Varnish не будет взаимодействовать с заголовком - он должен передать заголовок, установленный балансировщиком нагрузки, в Apache, что позволит Apache увидеть и зарегистрировать «настоящий» IP-адрес клиента.
Бегать nginx -V
и убедитесь, что у вас есть --with-http_realip_module
Если да, добавьте в свой /etc/nginx/nginx.conf
Раздел заголовка HTTP
set_real_ip_from 127.0.0.1;
real_ip_header X-Forwarded-For;
Когда-то сделали service nginx restart
(или /etc/init.d/nginx restart
)
Это проверено на лаке 3.0.4 и 100% рабочий.
******:varnishd -V
varnishd (varnish-3.0.4 revision 9f83e8f)
Выбранный ответ не совсем правильный (по крайней мере, для Varnish 3, apache на AWS вам нужно разместить настройки varnish следующим образом:
sub vcl_recv {
set req.backend = dsbalancer;
if (req.restarts == 0) {
if (req.http.x-forwarded-for) {
set req.http.X-Forwarded-For = req.http.X-Forwarded-For;
} else {
set req.http.X-Forwarded-For = client.ip;
}
}
И
затем добавьте директиву в свой httpd.conf LogFormat, чтобы зарегистрировать ее ..