Кэширующий прокси-сервер позволяет ускорить процесс установки ОС GNU/Linux, FreeBSD. Он кэширует пакеты, которые скачиваются с зеркал и репозиториев в процессе установки ОС.
Рекомендуем в качестве кэширующего прокси-сервера использовать squid.
В статье описана только начальная настройка. Для детальной настройки воспользуйтесь документацией squid.
Полную документацию squid 3.5 см. на официальном сайте.
Установка и настройка squid в CentOS7
Установите squid:
yum install squid.x86_64
systemctl enable squid.service
Настройка squid выполняется в файле /etc/squid/squid.conf.
После изменения конфигурационного файла перезапустите squid:
systemctl restart squid.service
Конфигурационный файл squid 3.5 по умолчанию выглядит следующим образом:
[root@test squid]# cat /etc/squid/squid.conf
#
# Recommended minimum configuration:
#
# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
#
# Recommended minimum Access Permission configuration:
#
# Deny requests to certain unsafe ports
http_access deny !Safe_ports
# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports
# Only allow cachemgr access from localhost
http_access allow localhost manager
http_access deny manager
# We strongly recommend the following be uncommented to protect innocent
# web applications running on the proxy server who think the only
# one who can access services on "localhost" is a local user
#http_access deny to_localhost
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
http_access allow localnet
http_access allow localhost
# And finally deny all other access to this proxy
http_access deny all
# Squid normally listens to port 3128
http_port 3128
# Uncomment and adjust the following to add a disk cache directory.
#cache_dir ufs /var/spool/squid 100 16 256
# Leave coredumps in the first cache dir
coredump_dir /var/spool/squid
#
# Add any of your own refresh_pattern entries above these.
#
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
Основные параметры конфигурационного файла squid
ACL
Управление доступом происходит с помощью списков доступа (ACL).
Списки доступа в конфигурационном файле squid указываются в виде:
acl aclname acltype argument ...
acl aclname acltype "file" ...
Основные типы субъектов доступа:
- acltype = src.
acl localnet src <адрес_сети>/<маска сети> — список IP-адресов в качестве субъекта доступа. - acltype = port.
acl SSL_ports port <порт или диапазон портов> — список портов в качестве субъекта доступа. - acltype = method.
acl CONNECT method <метод> — метод HTTP-запроса {GET, POST, CONNECT...}.
HTTP_ACCESS
Операции доступа в конфигурационном файле squid указываются в виде:
http_access allow|deny [!]aclname ...
Например:
-
- http_access allow localnet — разрешить доступ для localnet;
- http_access deny CONNECT !SSL_ports — запретить CONNECT по всем портам, кроме SSL;
- http_access deny all — запретить доступ для всех.
Правила проверяются поочерёдно, в порядке их указания в конфигурационном файле. Проверка происходит до тех пор, пока не будет найдено правило, подходящее для субъекта доступа. При отсутствии в конфигурационном файле операций доступа, запрос на доступ будет отклонён. При отсутствии подходящего правила доступа для запрашивающего субъекта, доступ будет разрешён, если последнее правило в списке запрещающее и доступ будет запрещён, если последнее правило в списке разрешающее. Рекомендуем в качестве последнего правила использовать "deny all". В таком случае, если ни одно из предыдущих правил не было применено к субъекту, доступ ему будет запрещён.
HTTP_PORT
Адреса сокетов, на которых squid будет ожидать запросы HTTP-клиентов, указываются в виде:
http_port <порт> [mode] [options]
http_port <имя хоста>:<порт> [mode] [options]
http_port <IP-адрес>:<порт> [mode] [options]
Например, http_port 3128
CACHE_DIR
По умолчанию кэш хранится только в памяти. Для хранения кэша на диске необходимо указать в конфигурационном файле параметр cache_dir:
cache_dir Type Directory-Name Fs-specific-data [options]
Для "ufs":
cache_dir Type Directory-Name Mbytes L1 L2 [options]
COREDUMP_DIR
По умолчанию squid оставляет файлы ядра в директории, из которой он был запущен. Для использования определённой директории необходимо указать в конфигурационном файле параметр coredump_dir:
coredump_dir Directory-Name
Например, coredump_dir /var/spool/squid.
REFRESH_PATTERN
Параметры refresh_pattern позволяют определить, являются данные в кэше новыми или старыми. При обращении к старым данным кэша, выполняется синхронизация данных кэша с данными оригинального источника. Refresh_pattern указываются в конфигурационном файле в виде:
refresh_pattern [-i] regex min percent max [options]
Справедливо для объектов без явного указания срока действия.
При обработке refresh_pattern выполняется алгоритм. Выполнение останавливается при первом же совпадении. Кэшированный объект:
FRESH if expire > now, else STALE
STALE if age > max
FRESH if lm-factor < percent, else STALE
FRESH if age < min
else STALE
То есть кэшированный объект:
1. Если явно указан срок действия:
-
- Новый, если срок действия не истёк.
- Старый в противном случае.
2. Старый, если его возраст превысил максимальный срок действия.
3. Новый, если время жизни запроса не превышает указанное количество процентов от времени жизни объекта.
4. Новый, если возраст меньше минимального срока действия.
5. Старый.
Например, refresh_pattern ^gopher: 1440 0% 1440.
Проверка работы squid
Для проверки:
-
Скачайте какой-либо файл через прокси с помощью wget, например:
http_proxy=http://127.1.1.1:3128/ wget -O /dev/null http://ftp.freebsd.org/pub/FreeBSD/ports/ports/ports.tar.gz
-
Проверьте лог squid в /var/log/squid/access.log. Должна присутствовать запись вида:
1381394282.324 12352 1.1.1.1 TCP_MISS/200 52127893 GET http://ftp.freebsd.org/pub/FreeBSD/ports/ports/ports.tar.gz - DIRECT/2001:6c8:130:800::4 application/x-gzip
-
При повторном скачивании файла в новой записи вместо "TCP_MISS" должно быть указано "TCP_HIT" или "TCP_HIT_MEM", например:
1381394328.563 235 1.1.1.1 TCP_HIT/200 52127902 GET http://ftp.freebsd.org/pub/FreeBSD/ports/ports/ports.tar.gz - NONE/- application/x-gzip
Настройка VMmanager
Укажите адрес прокси-сервера в Настройки кластера → Политики → поле HTTP proxy для IPv4 или HTTP proxy для IPv6. IPv4–адрес указывается в формате: http://<IP>:<Port>/, например http://127.1.1.1.1:3128/. IPv6–адрес указывается в формате: http://[<IP>]:<Port>/, например http://[1111:2222:3333::4444]:3128/. Укажите реальные IP-адреса, к которым виртуальные машины смогут подключиться. Если прокси расположен на том же сервере, что и панель управления, нельзя указывать loopback-адрес в качестве параметра, так как доступ к этому IP -адресу должен быть с любого из узлов кластера.