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

Массив обратного прокси-сервера Squid - братья и сестры не общаются друг с другом

Я хочу настроить 2 сервера squid в качестве обратного прокси и кеша для веб-сервера в нашей интрасети. Балансировка нагрузки будет выполняться с использованием циклического перебора DNS или просто разных сопоставлений для разных клиентов.

Дело в том, что я хочу, чтобы оба сервера попытались связаться друг с другом, чтобы узнать, есть ли у них требуемый объект в кеше, прежде чем связываться с ним для веб-сервера (сеть, которая обслуживает веб-сервер, является узким местом, и я пытаюсь устранить его)

Оба кальмара настроены одинаково, вот соответствующие строки конфигурации:

acl dvr1_cache_it_best_tv_com dstdomain dvr1.cache.it.best-tv.com
acl squid1_it_best_tv_com dstdomain squid1.it.best-tv.com
acl squid2_it_best_tv_com dstdomain squid2.it.best-tv.com

http_access allow dvr1_cache_it_best_tv_com
http_access allow squid1_it_best_tv_com
http_access allow squid2_it_best_tv_com
http_access allow all

http_port 8081 accel defaultsite=dvr1.cache.it.best-tv.com

cache_peer dvr1.origin.it.best-tv.com parent 80 0 no-query originserver name=Proxy_dvr1_origin_it_best_tv_com
cache_peer squid1.it.best-tv.com sibling 8081 3130 weight=10 name=Proxy_Squid1_it_best_tv_com
cache_peer squid2.it.best-tv.com sibling 8081 3130 weight=10 name=Proxy_Squid2_it_best_tv_com

cache_peer_access Proxy_dvr1_origin_it_best_tv_com allow dvr1_cache_it_best_tv_com
cache_peer_access Proxy_squid1_it_best_tv_com allow squid1_it_best_tv_com
cache_peer_access Proxy_squid1_it_best_tv_com allow squid2_it_best_tv_com
cache_peer_access Proxy_squid1_it_best_tv_com allow dvr1_cache_it_best_tv_com
cache_peer_access Proxy_squid2_it_best_tv_com allow squid1_it_best_tv_com
cache_peer_access Proxy_squid2_it_best_tv_com allow squid2_it_best_tv_com
cache_peer_access Proxy_squid2_it_best_tv_com allow dvr1_cache_it_best_tv_com

просто чтобы было понятно - dvr1.cache - это псевдоним для прокси-серверов. dvr1.origin - это веб-сервер.

Оба сервера работают, оба обслуживают контент и кешируют его и работают нормально. Однако, когда я очищаю кеш на одном сервере, а затем обращаюсь к нему, он получает содержимое от родительского (DVR1_ORIGIN) вместо того, чтобы переходить к брату-кальмару.

Что я неправильно настроил? Или, может быть, я неправильно понимаю архитектуру? Я читал руководства по squid, но насколько я понимаю, я делал все по инструкции, и все же это не работает правильно.

Любая помощь будет оценена по достоинству!

Не пробовал, поэтому не могу гарантировать, что это сработает. У меня есть идеи:

Во-первых, я думаю, что acls «dstdomain» должен относиться к обслуживаемому целевому домену, а не к имени хоста сервера (dvr1.cache.it.best-tv.com). Вероятно, это будет "it.best-tv.com", и вам понадобится всего лишь один объект acl.

acl dvr1_cache_it_best_tv_com dstdomain www.yourdomain.com
cache_peer_access Proxy_dvr1_origin_it_best_tv_com allow dvr1_cache_it_best_tv_com
cache_peer_access Proxy_squid1_it_best_tv_com allow dvr1_cache_it_best_tv_com
cache_peer_access Proxy_squid2_it_best_tv_com allow dvr1_cache_it_best_tv_com
http_port 8081 accel defaultsite=www.yourdomain.com

Во-вторых, порядок записей cache_peer имеет значение (хотя я не уверен, что это применимо в вашем случае). На всякий случай попробуйте поставить пира ORIGIN последним:

cache_peer squid1.it.best-tv.com sibling 8081 3130 weight=10 name=Proxy_Squid1_it_best_tv_com
cache_peer squid2.it.best-tv.com sibling 8081 3130 weight=10 name=Proxy_Squid2_it_best_tv_com
cache_peer dvr1.origin.it.best-tv.com parent 80 0 no-query originserver name=Proxy_dvr1_origin_it_best_tv_com

Наконец, вы можете попробовать использовать параметр только прокси в обоих определениях прокси cache_peer.

Надеюсь, это поможет.