Varni sh 4 + Pounds - обходной кеш для указания c IP-адреса - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь настроить Varni sh, чтобы он не использовал кэш для указанных c IP-адресов.

Я настроил Varni sh 4 на Centos с Apache с использованием Pound для управления HTTPS-запросами.

Я пытался следовать этому подходу:

Varni sh - Обходной кэш для IP-адреса

на основе

https://zcentric.com/2012/03/16/varnish-acl-with-x-forwarded-for-header/

с использованием некоторого кода C для управления IP-адреса. Предлагаемый код предназначен для Varnish3 (например, «sp» больше не существует, теперь есть переменная ctx)

Я пытался использовать этот подход Inline C Varni sh (VCL_deliver ) но я получаю * "инициализацию из несовместимого типа указателя [-Werror] в struct sockaddr_storage client_ip_ss = VRT_r_client_ip (ctx);" ошибка, вероятно, потому что тип также был изменен.

Код, который я пытаюсь использовать:

struct sockaddr_storage *client_ip_ss = VRT_r_client_ip(ctx); 
struct sockaddr_in *client_ip_si = (struct sockaddr_in *) client_ip_ss; 
struct in_addr *client_ip_ia = &(client_ip_si->sin_addr); 
const struct gethdr_s hdr = { HDR_REQ, "20X-Forwarded-For:" }; 
char *xff_ip = VRT_GetHdr(ctx, &hdr);

но я делаю что-то не так.

Я немного растерялся, как я могу отключить varni sh для уточнения c IP на Varni sh 4?

Спасибо

1 Ответ

1 голос
/ 24 марта 2020

Пожалуйста, не пишите 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);
  }
}
...