Инструкция: Настройка SOCKS5 прокси в MODX3 для работы с репозиторием

Проблема: замедления Cloudflare (rest.modx.com) на серверах в РФ, не возможность нормально скачивать и обновлять компоненты.

Решение: Модификация системных классов для принудительного использования SOCKS5 прокси.

ДЛЯ MODX 3.1.2 !!!



Для работы, нужен рабочий прокси, пишите в телегу @isk_douglas_quaid скину ссылку, где покупал, если надо.

Шаг 1: Настройка в админке
Заполните данные своего прокси в «Системных настройках» (раздел «Прокси»):

proxy_host: IP вашего прокси
proxy_port: Порт
proxy_username: Логин
proxy_password: Пароль

Шаг 2:

Файл: core/src/Revolution/modX.php

Найдите метод buildHttpClientOptions (в конце файла) и замени его полностью:

private function buildHttpClientOptions() {
    $opts = [
        'verify' => false,
        'timeout' => 120,
    ];
    $proxyHost = $this->getOption('proxy_host', null, '');
    if (!empty($proxyHost)) {
        $proxyPort = $this->getOption('proxy_port', null, '9858');
        $proxyUser = $this->getOption('proxy_username', null, '');
        $proxyPass = $this->getOption('proxy_password', null, '');

        // Формируем строку прокси
        $auth = !empty($proxyUser) ? "{$proxyUser}:{$proxyPass}@" : "";
        $opts['proxy'] = "socks5h://{$auth}{$proxyHost}:{$proxyPort}";

        // Принудительно задаем тип SOCKS5 для cURL
        $opts['curl'] = [
            CURLOPT_PROXYTYPE => CURLPROXY_SOCKS5_HOSTNAME,
            CURLOPT_HTTPPROXYTUNNEL => true,
        ];
    }
    return $opts;
}
Шаг 3: Правка Транспорта
Этот файл отвечает за физическое скачивание .zip архивов пакетов на ваш сервер.

Файл: core/src/Revolution/Transport/modTransportPackage.php

Найдите блок cURL внутри метода transferPackage (район 453-й строки) и замени его:

/* if not, try curl */
if (empty($content) && function_exists('curl_init')) {
    $ch = curl_init();
    

    $proxyHost = $this->xpdo->getOption('proxy_host', null, '');
    if (!empty($proxyHost)) {
        $proxyPort = $this->xpdo->getOption('proxy_port', null, '9858');
        $proxyUsername = $this->xpdo->getOption('proxy_username', null, '');
        $proxyPassword = $this->xpdo->getOption('proxy_password', null, '');

        curl_setopt($ch, CURLOPT_PROXY, $proxyHost);
        curl_setopt($ch, CURLOPT_PROXYPORT, $proxyPort);
        curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);
        curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);


        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

        if (!empty($proxyUsername)) {
            $up = $proxyUsername . (!empty($proxyPassword) ? ':' . $proxyPassword : '');
            curl_setopt($ch, CURLOPT_PROXYUSERPWD, $up);
            curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_BASIC);
        }
    }

    curl_setopt($ch, CURLOPT_URL, $source);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 180);

    $openBasedir = @ini_get('open_basedir');
    if (empty($openBasedir)) {
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    }

    $content = curl_exec($ch);
    curl_close($ch);
}
Шаг 3: Очистка кэша

Удалите папку core/cache/ полностью через FTP или файловый менеджер хостинга.
Ivan K.
Вчера в 21:05
modx.pro
88
0

Комментарии: 1

FastDevLab
2 часа назад
0
А зачем модифицировать Modx, если проксю на ПК поставить, можно спокойно устанавливать пакеты) ну и ВПН пока никто не отменял)
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    1