Squid за Apache 2.4

Вопрос или проблема

Мне нужно расположить экземпляр Squid в качестве обратного прокси за Apache 2.4.6. У меня недостаточно кредитов, чтобы добавлять изображения в текст. Но вот оно

Поскольку Squid3.3 слушает на localhost:3128 и работает нормально с конфигурацией по умолчанию, у меня есть следующая конфигурация виртуального хоста для Apache:

<VirtualHost example.com:443>
    SSLEngine on
       [конфигурация файла сертификата]
    ServerName example.com
    DocumentRoot /var/www
    ProxyRequests Off
    ProxyVia Off
    ProxyRemote * http://127.0.0.1:3128
    LogLevel debug
    ErrorLog /var/log/apache2/tunnel_error.log
    CustomLog /var/log/apache2/tunnel_access.log combined
</VirtualHost>

Тем не менее, мои прокси-запросы вообще не обрабатываются через Squid 3.3.

Я наткнулся на множество статей в Интернете, объясняющих кэширование перед Apache, однако, (возможно, я пропустил) мне нужно, чтобы Apache принимал запросы CONNECT и передавал их на Squid.

У вас есть идея, как это сделать?

.

.

Редактировать

Пробую с помощью proxypass

    ProxyRequests Off
    ProxyVia Off
    ProxyPass http://127.0.0.1:3128/
    ProxyPassReverse http://127.0.0.1:3128/

Apache, похоже, перенаправляет мой запрос к Squid довольно неплохо. Потому что Squid на этот раз предупреждает меня о:

ОШИБКА

Запрашиваемый URL не может быть получен
При попытке получить URL: /
    "Неверный URL"
Некоторые аспекты запрашиваемого URL неверны.
Некоторые возможные проблемы:
    * Отсутствует или неверный протокол доступа (должен быть http:// или аналогичный)
    * Отсутствует имя хоста
    * Неверный двойной экранированный в URL-адресе
    * Неверный символ в имени хоста; подчеркивания не допускаются.
Ваш администратор кэша - веб-мастер.

Похоже, что Squid считает, что я хотел бы получить http://icanhazip.com как страницу с моего собственного сервера. (Или я ошибаюсь?)

==> журнал доступа apache <==
1.1.1.1.myip - - [03/Apr/2014:23:33:26 +0300] "GET http://icanhazip.com/ HTTP/1.1" 400 2006 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36"
==> журнал доступа squid3 <==
1396557520.935      0 127.0.0.1 NONE/400 2006 GET / - HIER_NONE/- text/html

.
.

Редактировать 2 – Диаграмма

Желаемое решение выглядит следующим образом:

1) Так как я все еще не смог найти выход. Я хотел бы улучшить вопрос, как было предложено, с помощью диаграммы.

2) Я заметил, изучая заголовки, что

GET /
Host: yahoo com

который передается от Apache к Squid, должен быть

GET http:\\yahoo.com

например, чтобы удачно это сработало.

URL диаграммы находится вверху.

комбинация
ProxyRemote * http://localhost:3128
с
RewriteRule ^/(.*)$ http://$1 [P,L] решила аналогичную проблему для меня.

Ответ или решение

Чтобы настроить прокси-сервер Squid за Apache 2.4, необходимо правильно сконфигурировать оба сервера так, чтобы Apache корректно передавал запросы к Squid, а Squid обрабатывал их должным образом. В данном ответе мы охватим ключевые аспекты этой настройки.

Почему необходима данная конфигурация?

Squid, как форвардный прокси, может быть использован для кеширования и фильтрации HTTP-запросов. Apache, в свою очередь, может обрабатывать HTTPS-запросы, предоставляя шифрование и дополнительные возможности. Причем, важно, чтобы Apache принимал соединения CONNECT, которые используются для установления безопасных соединений.

Базовая конфигурация Apache

Ваш файл конфигурации виртуального хоста в Apache выглядит следующим образом:

<VirtualHost example.com:443>
    SSLEngine on
    # [настройка SSL-сертификатов]
    ServerName example.com
    DocumentRoot /var/www
    ProxyRequests Off
    ProxyVia Off
    ProxyRemote * http://127.0.0.1:3128
    LogLevel debug
    ErrorLog /var/log/apache2/tunnel_error.log
    CustomLog /var/log/apache2/tunnel_access.log combined
</VirtualHost>

Настройка ProxyPass и RewriteRule

Для того чтобы Apache правильно перенаправлял запросы к Squid, необходимо воспользоваться директивами ProxyPass и RewriteRule. Ваши настройки нужно немного доработать. Попробуйте следующую конфигурацию:

<VirtualHost example.com:443>
    SSLEngine on
    # [настройка SSL-сертификатов]
    ServerName example.com
    DocumentRoot /var/www

    ProxyRequests Off
    ProxyVia On

    # Включаем поддержку CONNECT-запросов
    <Location />
        Allow from all
        ProxyPassMatch "^/(.*)" "http://127.0.0.1:3128/$1"
        ProxyPassReverse "/" "http://127.0.0.1:3128/"
    </Location>

    LogLevel debug
    ErrorLog /var/log/apache2/tunnel_error.log
    CustomLog /var/log/apache2/tunnel_access.log combined
</VirtualHost>

Обработка HTTPS-запросов

Если вы хотите, чтобы Apache поддерживал HTTPS-запросы и передавал их на Squid, убедитесь, что Squid настроен на поддержку соединения через CONNECT. Это будет означать, что Squid должен уметь обрабатывать запросы вида:

CONNECT hostname:port HTTP/1.1
Host: hostname:port

Актуализация конфигурации Squid

Проверьте конфигурацию Squid (обычно находится в /etc/squid/squid.conf или аналогичном месте) и убедитесь, что ваш Squid может обрабатывать запросы, например:

http_port 127.0.0.1:3128
http_access allow all

Убедитесь также, что у вас нет правил, которые могли бы блокировать определенные запросы.

Отладка

После внесения изменений перезапустите Apache и Squid:

sudo systemctl restart apache2
sudo systemctl restart squid

Проверьте логи Apache и Squid, чтобы увидеть, поступают ли запросы как планировалось. Поищите ошибки и при необходимости внесите коррективы в настройки.

Заключение

Такое сочетание Apache и Squid обеспечивает гибкость в управлении входящими запросами, позволяя массово настраивать работу с кешированием и безопасностью. Корректная маршрутизация запросов через ProxyPass и обработка CONNECT являются ключевыми аспектами успешной конфигурации этой цепочки. Не забывайте регулярно проверять логи для выявления возможных проблем и оптимизации работы системы.

Оцените материал
Добавить комментарий

Капча загружается...