Настройте 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 распределить ваши запросы по доменам любым удобным для вас способом, указав клиенту запрашивать запрос с любого сервера, который является правильным. Надеюсь это поможет.