Настройте Squid в качестве обратного прокси-сервера за прозрачным прокси

У меня есть вопрос о настройке Squid в качестве обратного прокси-сервера позади прозрачного / прямого прокси. По сути, я ищу, можно ли настроить (B) следующим образом:

Клиент (A) -> Squid в качестве обратного прокси (B) -> Squid в качестве прямого прокси (C) -> Исходные серверы в зависимости от URI запроса клиента (D)

В зависимости от запроса клиента от (A), (B) может направить запрос на разные исходные серверы (несколько строк cache_peer). Запрос должен пройти через (C), чтобы достичь (D), так как (C) является единственным выходом из сети в Интернет. Более того, логика выяснения, куда идти, лежит в (B).

И у нас нет доступа или контроля над (A) и (C).

Допустим, у меня есть следующие строки cache_peer в (B), а адрес для (C) - "forward-proxy.example.com:3128".

cache_peer    origin-x.example.com    parent 443 0 no-query originserver ssl
cache_peer    origin-y.example.com    parent 443 0 no-query originserver ssl
cache_peer    origin-z.example.com    parent 443 0 no-query originserver ssl

Каков будет синтаксис для настройки (B) использования "forward-proxy.example.com:3128" (C) в качестве прямого прокси-сервера для исходных серверов (D)?

Спасибо!

1 ответ

Да, это возможно, хотя, вероятно, не так, как вы думаете об этом.

Вы много говорите о Си, как будто это имеет значение; так как вы не можете это контролировать, вам следует перестать беспокоиться об этом. Если нет более одного C, и его можно использовать для выбора ваших исходных серверов, C совершенно не имеет значения... это просто мешает (и не позволяет вам использовать более прямые методы выбора исходных серверов).

Вы не можете / не можете определить исходный сервер в этом сценарии с помощью директив cache_peer; cache_peer настраивает, как Squid общается с другими прокси, а не с исходными серверами. Поскольку вы не можете управлять средним Squid, вы не можете выполнять какой-либо выбор непосредственно на исходном сервере; т. е. прямой прокси-сервер всегда будет переходить к запрашиваемому вами доменному имени, и это не будет основано на ваших критериях выбора в B. (Если бы вы имели контроль над этим другим Squid, у вас было бы больше вариантов).

Один из способов добиться того, чего вы хотите, - дать вашим исходным серверам несколько дополнительных имен, чтобы ваш первый Squid (B) мог переписывать запросы на основе URI к новым доменным именам, а средний Squid мог делать запросы на основе доменного имени.

Вы можете использовать опцию url_rewrite_helper, чтобы использовать программу перезаписи для изменения URL любым способом, который вы выберете. Если бы это был я, я бы, вероятно, создал бы новое имя для каждого исходного сервера (a, b, c и т. Д.), А затем переписал бы, основываясь на том фрагменте данных, который у вас есть, для этих имен. Итак, если ваш URI - " http://domain.tld/a/image.png", вы можете переписать его как " http://a.domain.tld/image.png" и " http://domain.tld/b/image.png"to" http://b.domain.tld/image.png".

Конечно, вам необходимо настроить исходные серверы для ответа на эти новые домены и, возможно, настроить их для восстановления URI из того, который он получает.

Рекомендации:

http://www.squid-cache.org/Doc/config/url_rewrite_program/

И, переписать информацию и пример переписать программу:

http://wiki.squid-cache.org/Features/Redirectors

Вы также можете пропустить, чтобы этот первый squid определял источник, и позволить приложению origin распределить ваши запросы по доменам любым удобным для вас способом, указав клиенту запрашивать запрос с любого сервера, который является правильным. Надеюсь это поможет.

Другие вопросы по тегам