Пожалуйста, не пишите inline C в Varni sh: это рискованно, и искомое решение уже автоматически реализовано в Varni sh.
Имейте в виду что Varni sh v3 и v4 больше не поддерживаются, используйте Varni sh 6
Varni sh автоматически устанавливает заголовок X-Forwarded-For
Если вы хотите исключая элементы из кэша на основе значения X-Forwarded-For
, вы все равно можете использовать client.ip
и сопоставить это значение с acl
.
Varni sh автоматически получит IP-адрес от своего клиента и сохранит это в заголовке X-Forwarded-For
. Это означает, что значение client.ip
точно такое же, как req.http.X-Forwarded-For
.
Несколько прокси и протокол PROXY
Когда другие прокси используются до достижения Varni sh, у вас есть чтобы убедиться, что они общаются по протоколу PROXY . Varni sh поддерживает протокол PROXY, остальные прокси тоже должны.
В вашем случае это Pound. Сообщество Varni sh рекомендует Hitch для завершения TLS.
Включение поддержки протокола PROXY в Varni sh осуществляется путем открытия определенного c адреса прослушивания:
varnishd -a :80 -a :8443,PROXY
Varni sh может принимать соединения через порт 8443
по протоколу PROXY.
Основное преимущество использования протокола PROXY заключается в том, что исходный IP-адрес клиента передается по всем путь в Варни sh. Независимо от количества прокси перед Varni sh, значение client.ip
всегда будет IP-адресом исходного клиента.
Если Pound не поддерживает протокол PROXY, я бы советуем вам переключиться на Hitch .
Определение ACL
Как только вам удастся настроить завершение TLS с поддержкой протокола PROXY, вы можете просто написать несколько VCL для передачи элементов из кеш, как показано ниже:
acl passem { "7x.xxx.xxx.xxx"; }
sub vcl_recv {
if (!(client.ip ~ passem)) {
return (pass);
}
}