Прокси-сервер Squid в Docker на VPS: как обойти блокировку обновлений WordPress

1 марта 2023 года я поднял прокси-сервер Squid в Docker на VPS с Ubuntu. Понадобился он, когда некоторые плагины и темы перестали обновляться с российского хостинга: их серверы не отвечают на запросы из России. Тогда исходящие запросы WordPress можно пустить через прокси на зарубежном сервере. Как я на это наткнулся, описано в заметке про Blocksy Companion.

Шаг 1. Ставим Docker

В стандартных репозиториях Ubuntu Docker старый, поэтому ставим его из официального репозитория:

sudo apt update
sudo apt install ca-certificates curl -y
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y

Проверяем, что служба запущена и Compose на месте:

sudo systemctl status docker
docker compose version

Шаг 2. Готовим конфигурацию

Создаём папку и файл docker-compose.yaml:

mkdir squid && cd squid
nano docker-compose.yaml
services:
  proxy:
    image: ubuntu/squid
    ports:
      - "8080:3128"
    volumes:
      - ./squid.conf:/etc/squid/squid.conf
      - ./passwords:/etc/squid/passwords
    restart: always

Снаружи прокси будет доступен на порту 8080, внутри контейнера Squid слушает 3128. Теперь файл squid.conf:

acl SSL_ports port 443
acl Safe_ports port 80
acl Safe_ports port 443
acl CONNECT method CONNECT
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwords
auth_param basic realm my-proxy
acl authenticated proxy_auth REQUIRED
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow authenticated
http_access deny all
http_port 3128
cache deny all
access_log none
cache_log /dev/null

Пускать будем только по логину и паролю, иначе прокси быстро найдут и начнут гонять через него чужой трафик.

Шаг 3. Пользователи

Утилита htpasswd лежит в пакете apache2-utils. Первого пользователя создаём с ключом -c, следующих без него:

sudo apt install apache2-utils -y
htpasswd -c passwords имя_пользователя
htpasswd passwords второй_пользователь

Шаг 4. Запуск

docker compose up -d
docker ps

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

Шаг 5. Подключаем WordPress

В wp-config.php сайта добавляем адрес VPS, порт 8080 и данные пользователя. WordPress сам пустит через прокси исходящие запросы, включая обновления:

define( 'WP_PROXY_HOST', 'IP-вашего-VPS' );
define( 'WP_PROXY_PORT', '8080' );
define( 'WP_PROXY_USERNAME', 'имя_пользователя' );
define( 'WP_PROXY_PASSWORD', 'пароль' );
define( 'WP_PROXY_BYPASS_HOSTS', 'localhost, *.wordpress.org' );

Если не хочется править конфиг, есть плагин, о нём заметка про Proxy Server Helper.

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

Источники и ссылки


Комментарии загружаются…