Proxy Server Helper

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;
  • сброс настроек одной кнопкой.

Установка

  1. Скачайте плагин из репозитория на GitHub.
  2. В админке WordPress откройте Плагины → Добавить новый → Загрузить плагин.
  3. Загрузите 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 проходят без таймаутов.

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


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