Инструкция: Настройка 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 (в конце файла) и замени его полностью:
Этот файл отвечает за физическое скачивание .zip архивов пакетов на ваш сервер.
Файл: core/src/Revolution/Transport/modTransportPackage.php
Найдите блок cURL внутри метода transferPackage (район 453-й строки) и замени его:
Удалите папку core/cache/ полностью через FTP или файловый менеджер хостинга.
Решение: Модификация системных классов для принудительного использования 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 или файловый менеджер хостинга.
Комментарии: 1
А зачем модифицировать Modx, если проксю на ПК поставить, можно спокойно устанавливать пакеты) ну и ВПН пока никто не отменял)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.