Инструкция: Настройка 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 или файловый менеджер хостинга.
Комментарии: 21
А зачем модифицировать Modx, если проксю на ПК поставить, можно спокойно устанавливать пакеты) ну и ВПН пока никто не отменял)
- `verify => false` — отключает проверку SSL сертификатов (потенциально небезопасно);
- `CURLOPT_SSL_VERIFYPEER` внутри блока прокси — без прокси SSL работает, с прокси отключен;
- Порт 9858 захардкожен, хотя стандартный SOCKS5 — 1080;
- Нет обработки ошибок cURL и логирования для диагностики;
- Нет timeout на подключение к прокси.
- Более стабильное решение;
- Работает точечно для MODX.
- Проще для неопытных пользователей;
- Работает для всех приложений;
- Не требует правки системных файлов.
- SOCKS5 — требует платную подписку.
- Amnezia — периодически блокируется, нужно обновлять конфиги.
- SOCKS5 — работает у ВСЕХ (проверено)
- Amnezia — у меня работает, но регионально блокируется
Потому что так это не работает.
Как не работает? У меня с бесплатным ВПН все работает: скачивается. обновляется и т.п. Да и если прокси установить в конфиг пк, то тоже работает все
У меня не работает, что с VPN что без него. Только этот метод помог. С включеным VPN может вообще не открыться сайт на серверах в РФ. Я конечно понимаю, что менять файлы MODX это не очень хорошо, но что делать-то?)
Вот здесь бесплатное решение проблемы t.me/FastDevLab/41 (для тех у кого Windows)
Не будет этот вариант работать. Соединение с репозиторием идет с ip сервера, где у вас MODX не ужели не улавливаете?) Да и протокол, который вы указали блокируется, по крайне мере в Москве.
Хотел видео записать) Но у меня и без всяких ВПН, прокси и т.п. все работает и качается — по крайней мере сейчас) В общем мое решение в любом случае работает (как минимум пригодится для тех кто разрабатывает локально) и не требует вложений + тот же ютуб разблокирует)
Но у меня и без всяких ВПНВот я так и знал))Как перестанет работать без впн, так мой метод пригодится)
Вот работает (ссылка на запись gif) и сомневаюсь, что перестанет работать) Не знаю почему у вас не работает. И утверждение что «Соединение с репозиторием идет с ip сервера, где у вас MODX», получается ошибочно
То что у вас работает, не имеет отношение, к тому, что вы используете впн.
MODX обращается к репозиторию не через ваш впн! обращение идет от сервера, где у вас установлен MODX!!! Использование впн на вашем локальном компьютере не подменит ip сервера, где находится MODX.
Репозиторий MODX за Cloudflare — вы жмете «скачать компонент» идет обращение СЕРВЕРА где MODX к серверам Cloudflare, ip у них динамические, один раз нажмете попадете на тот который замедляется второй раз на тот, что еще не замедляют.
MODX обращается к репозиторию не через ваш впн! обращение идет от сервера, где у вас установлен MODX!!! Использование впн на вашем локальном компьютере не подменит ip сервера, где находится MODX.
Репозиторий MODX за Cloudflare — вы жмете «скачать компонент» идет обращение СЕРВЕРА где MODX к серверам Cloudflare, ip у них динамические, один раз нажмете попадете на тот который замедляется второй раз на тот, что еще не замедляют.
Как с вами сложно, до включения впн, 5 раз пытался обновить компонент и он не обновился, включил он обновился. Типа совпадение (уже раз 20й примерно так)?
Я устал спорить ни о чем. Если у вас работает, то и хорошо.
Согласен, не стоит спорить — оба подхода работают, просто решают задачу по-разному.
Ваше решение действительно работает, это главное. Но если позволите, поделюсь замечаниями по коду (не критика, а предложения по улучшению безопасности):
По Amnezia WG — она тоже работает и обходит блокировки благодаря обфускации. Главное отличие — она поднимает VPN для всей системы, а не только для MODX.
Плюсы SOCKS5 (ваш подход):
Спасибо, что поделились инструкцией, она реально полезна.
Ваше решение действительно работает, это главное. Но если позволите, поделюсь замечаниями по коду (не критика, а предложения по улучшению безопасности):
По Amnezia WG — она тоже работает и обходит блокировки благодаря обфускации. Главное отличие — она поднимает VPN для всей системы, а не только для MODX.
Плюсы SOCKS5 (ваш подход):
Спасибо, что поделились инструкцией, она реально полезна.
Ну зачем — это генеретика ИИ ??
По Amnezia WG: не у всех работает, возможно только у вас)
Подход с прокси: будет работать у всех!
Вот правильное заключение)
По Amnezia WG: не у всех работает, возможно только у вас)
Подход с прокси: будет работать у всех!
Вот правильное заключение)
ИИ всего лишь помог красиво сформулировать, не более.
Но по сути согласен:
Моё больше как «лайфхак»
На этом спор думаю можно завершить. Каждый сам выберет то что ему ближе)
Но по сути согласен:
Моё больше как «лайфхак»
На этом спор думаю можно завершить. Каждый сам выберет то что ему ближе)
Тут ведь речь о том, чтобы не на ПК скачивать, а сразу на сайте через менеджер пакетов устанавливать обновления пакетов или загружать новые. В этом случае на адрес репозитория обращается не ПК пользователя админки сайта, а сам сайт (отображая для пользователя лишь результаты).
А в целом можно конечно скачивать пакет из репозитория на свой комп, потом загружать вручную на сайт и оттуда устанавливать, но это же не удобно :)
Поэтому инструкция кажется очень полезной. Спасибо @Ivan K. что поделился!
А я правильно понимаю, что это какая-то недоработка со стороны MODX? Настройки прокси стоковые (есть и в MODX v2.8.x который у меня оказался под рукой), но выходит, они не используются ядром для установки пакета (а для чего тогда используются...?!), т.е. это похоже на баг?
А в целом можно конечно скачивать пакет из репозитория на свой комп, потом загружать вручную на сайт и оттуда устанавливать, но это же не удобно :)
Поэтому инструкция кажется очень полезной. Спасибо @Ivan K. что поделился!
А я правильно понимаю, что это какая-то недоработка со стороны MODX? Настройки прокси стоковые (есть и в MODX v2.8.x который у меня оказался под рукой), но выходит, они не используются ядром для установки пакета (а для чего тогда используются...?!), т.е. это похоже на баг?
А я правильно понимаю, что это какая-то недоработка со стороны MODX?это можно назвать архитектурной недоработкой (или «техническим долгом»), которая стала критичной именно в современных реалиях.
Настройки прокси в MODX изначально проектировались под протокол HTTP. Поля в админке есть, но ядро системы по умолчанию «под капотом» говорит библиотеке cURL: «Используй это как HTTP-прокси». Когда вы подсовываете системе SOCKS5, она просто не понимает, что с ним делать, потому что в интерфейсе отсутствует переключатель «Тип прокси».
Отсутствие поддержки удаленного DNS (SOCKS5h): Cloudflare, за которым стоит репозиторий MODX требуют, чтобы DNS-запрос тоже шел через прокси. Обычные настройки MODX этого не умеют — они пытаются разрешить адрес сервера локально, получают блокировку и соединение обрывается.
Это все понятно. Амнезия не совсем стандартный ВПН (она не меняет местоположение, там своеобразная система обфускации — она подменяет провайдера на Cloudflare) — в общем при ее включении, пакеты обновляются из админки MODX. Она не разблокирует все, к примеру с ней на зайти к примеру на gemini.google.com, но зато полезные сайты типа swiperjs.com начинают работать стабильно. В общем я до конца не понимаю как это работает — но работает.
Как будто мы вообще про разное говорим. Если у тебя при подключении к VPN начинают скачиваться пакеты в modx, значит твой сайт подключается к vpn и использует шлюз из другой сети для выхода в интернет, а так это работает только если сайт тоже работает на твоём же компе, как делают некоторые локальную разработку на базе XAMPP, open server и прочих Denwer-ов. В статье речь о том, чтобы заставить сайт, лежащий на внешнем хостинге, с которого не работает скачивание пакетов, подключить к прокси, через который дополнения (пакеты) для CMS MODX начнут скачиваться нормально.
Кстати говоря, я пока не встречал проблем скачивания на своих сайтах. Кроме случаев, когда изредка лагает репозиторий, и повторная попытка через пару минут пока помогает.
Кстати говоря, я пока не встречал проблем скачивания на своих сайтах. Кроме случаев, когда изредка лагает репозиторий, и повторная попытка через пару минут пока помогает.
Кстати говоря, я пока не встречал проблем скачивания на своих сайтах. Кроме случаев, когда изредка лагает репозиторий, и повторная попытка через пару минут пока помогает.
У меня на шаред-хостингах тоже все нормально скачивается, а вот на VDS один за другим перестает.
И мой метод скорее всего на шаред-хостинге работать не будет, на шареде порты закрыты и не дают законектиться
а так это работает только если сайт тоже работает на твоём же компе, как делают некоторые локальную разработку на базе XAMPP, open server и прочих Denwer-ов. — Так я не локально разрабатываю. Сайты (их много, т.к. не только мои) на шаред хостингах (причем разных, дата центры в основном в МСК и Питере) (не VPS) — и у меня мой метод работает (именно на внешнем хостинге, на локальных соответственно тоже).
Кстати говоря, я пока не встречал проблем скачивания на своих сайтах. Кроме случаев, когда изредка лагает репозиторий, и повторная попытка через пару минут пока помогает.
У меня регулярно такие проблемы, в основном с большими пакетами типа TinyMCE RTE.
Кстати говоря, я пока не встречал проблем скачивания на своих сайтах. Кроме случаев, когда изредка лагает репозиторий, и повторная попытка через пару минут пока помогает.
У меня регулярно такие проблемы, в основном с большими пакетами типа TinyMCE RTE.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.