Proxy Server Helper — плагин для WordPress, который задаёт исходящий HTTP(S)-прокси прямо из админки. Нужен, когда сервер сайта не может ходить наружу напрямую: файрволл, ограничения провайдера, отдельный outbound-канал через Squid или другой прокси.
После настройки плагин подмешивает параметры прокси в исходящие запросы WordPress: обновления ядра, плагинов и тем, обращения к внешним API через wp_remote_* и связанные механизмы HTTP API.
Репозиторий: github.com/A-Krivoshen/dr_proxy
Зачем WordPress вообще нужен прокси
Типичные сценарии:
- Сетевые ограничения. Сервер за файрволлом или в сети, где прямой доступ к api.wordpress.org и внешним API закрыт.
- Единая точка выхода. Весь outbound-трафик идёт через контролируемый прокси с логированием и фильтрацией.
- Стабильность. Когда прямой канал до внешних сервисов нестабилен, а через прокси — нормально.
Настраивать прокси в PHP или в системных переменных окружения на каждом сайте неудобно. Proxy Server Helper выносит это в интерфейс WordPress и хранит чувствительные поля в зашифрованном виде.
Что умеет плагин
- настройка адреса, порта и протокола (HTTP/HTTPS) через админку;
- опциональная авторизация (логин и пароль);
- шифрование сохранённых данных через OpenSSL (AES-256-CBC) с ключом на базе
AUTH_SALT; - применение прокси ко всем исходящим HTTP-запросам WordPress через фильтр
http_request_args; - сброс настроек одной кнопкой.
Установка
- Скачайте плагин из репозитория на GitHub.
- В админке WordPress откройте Плагины → Добавить новый → Загрузить плагин.
- Загрузите ZIP, установите и активируйте.
Настройка
После активации появляется раздел Proxy Settings. Заполните поля:
- Адрес прокси — IP или домен;
- Порт — например,
8090; - Протокол — HTTP или HTTPS;
- Имя пользователя и пароль — если прокси требует авторизацию.
Сохраните настройки. Чтобы сбросить всё сразу, используйте кнопку Сбросить настройки внизу страницы.
Проверка
Самый простой тест: обновление плагинов или тем в админке. Если прокси — Squid, смотрите access-лог на сервере прокси:
tail -f /var/log/squid/access.log
В логе должны появиться исходящие запросы WordPress (api.wordpress.org и другие хосты, к которым ходит сайт).
Как это устроено в коде
Чувствительные значения шифруются перед сохранением в опции. Ключ берётся из AUTH_SALT, IV генерируется случайно и хранится вместе с ciphertext:
function encrypt_proxy_data($value) {
$key = AUTH_SALT;
$iv = openssl_random_pseudo_bytes(16);
$encrypted_value = openssl_encrypt($value, 'aes-256-cbc', $key, 0, $iv);
return base64_encode($iv . $encrypted_value);
}
function decrypt_proxy_data($value) {
$key = AUTH_SALT;
$data = base64_decode($value);
$iv = substr($data, 0, 16);
$encrypted_value = substr($data, 16);
return openssl_decrypt($encrypted_value, 'aes-256-cbc', $key, 0, $iv);
}
Подключение прокси к HTTP API WordPress — через фильтр http_request_args:
add_filter('http_request_args', 'proxy_http_request_args', 10, 1);
function proxy_http_request_args($args) {
$proxy_address = get_option('proxy_address', '');
$proxy_port = get_option('proxy_port', '');
$proxy_protocol = get_option('proxy_protocol', '');
$username = decrypt_proxy_data(get_option('proxy_username', ''));
$password = decrypt_proxy_data(get_option('proxy_password', ''));
if (!empty($proxy_address) && !empty($proxy_port)) {
$proxy_url = sprintf('%s://%s:%s', $proxy_protocol, $proxy_address, $proxy_port);
$args['proxy'] = $proxy_url;
if (!empty($username) && !empty($password)) {
$args['headers']['Proxy-Authorization'] = 'Basic ' . base64_encode("$username:$password");
}
}
return $args;
}
Если адрес и порт заданы, в аргументы запроса добавляется URL прокси. При наличии логина и пароля — заголовок Proxy-Authorization с Basic-авторизацией.
Когда это имеет смысл
Плагин оправдан, если WordPress не может ходить наружу без прокси, а править окружение PHP или системный конфиг на каждом хосте не хочется. Для обычного VPS с прямым интернетом он, как правило, не нужен.
Перед продом проверьте, что прокси реально пропускает нужные хосты и что обновления WordPress проходят без таймаутов.
