Инструкция: Настройка 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.
19 января 2026, 21:05
modx.pro
1
1 369
+2

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

FastDevLab
20 января 2026, 07:44
0
А зачем модифицировать Modx, если проксю на ПК поставить, можно спокойно устанавливать пакеты) ну и ВПН пока никто не отменял)
    Ivan K.
    20 января 2026, 10:26
    0
    Потому что так это не работает.
      FastDevLab
      20 января 2026, 11:07
      0
      Как не работает? У меня с бесплатным ВПН все работает: скачивается. обновляется и т.п. Да и если прокси установить в конфиг пк, то тоже работает все
        Ivan K.
        20 января 2026, 13:12
        0
        У меня не работает, что с VPN что без него. Только этот метод помог. С включеным VPN может вообще не открыться сайт на серверах в РФ. Я конечно понимаю, что менять файлы MODX это не очень хорошо, но что делать-то?)
          FastDevLab
          23 января 2026, 09:23
          0
          Вот здесь бесплатное решение проблемы t.me/FastDevLab/41 (для тех у кого Windows)
            Ivan K.
            23 января 2026, 10:27
            0
            Не будет этот вариант работать. Соединение с репозиторием идет с ip сервера, где у вас MODX не ужели не улавливаете?) Да и протокол, который вы указали блокируется, по крайне мере в Москве.
              FastDevLab
              23 января 2026, 11:47
              0
              Хотел видео записать) Но у меня и без всяких ВПН, прокси и т.п. все работает и качается — по крайней мере сейчас) В общем мое решение в любом случае работает (как минимум пригодится для тех кто разрабатывает локально) и не требует вложений + тот же ютуб разблокирует)
                Ivan K.
                23 января 2026, 11:53
                0
                Но у меня и без всяких ВПН
                Вот я так и знал))
                Как перестанет работать без впн, так мой метод пригодится)
                  FastDevLab
                  26 января 2026, 10:16
                  0
                  Вот работает (ссылка на запись gif) и сомневаюсь, что перестанет работать) Не знаю почему у вас не работает. И утверждение что «Соединение с репозиторием идет с ip сервера, где у вас MODX», получается ошибочно
                    Ivan K.
                    26 января 2026, 10:43
                    0
                    То что у вас работает, не имеет отношение, к тому, что вы используете впн.
                    MODX обращается к репозиторию не через ваш впн! обращение идет от сервера, где у вас установлен MODX!!! Использование впн на вашем локальном компьютере не подменит ip сервера, где находится MODX.

                    Репозиторий MODX за Cloudflare — вы жмете «скачать компонент» идет обращение СЕРВЕРА где MODX к серверам Cloudflare, ip у них динамические, один раз нажмете попадете на тот который замедляется второй раз на тот, что еще не замедляют.
                      FastDevLab
                      26 января 2026, 11:03
                      0
                      Как с вами сложно, до включения впн, 5 раз пытался обновить компонент и он не обновился, включил он обновился. Типа совпадение (уже раз 20й примерно так)?
                      Ivan K.
                      26 января 2026, 11:08
                      0
                      Я устал спорить ни о чем. Если у вас работает, то и хорошо.
                      FastDevLab
                      26 января 2026, 11:46
                      -1
                      Согласен, не стоит спорить — оба подхода работают, просто решают задачу по-разному.

                      Ваше решение действительно работает, это главное. Но если позволите, поделюсь замечаниями по коду (не критика, а предложения по улучшению безопасности):
                      • `verify => false` — отключает проверку SSL сертификатов (потенциально небезопасно);
                      • `CURLOPT_SSL_VERIFYPEER` внутри блока прокси — без прокси SSL работает, с прокси отключен;
                      • Порт 9858 захардкожен, хотя стандартный SOCKS5 — 1080;
                      • Нет обработки ошибок cURL и логирования для диагностики;
                      • Нет timeout на подключение к прокси.
                      Это не баги, просто можно сделать код более универсальным и безопасным.

                      По Amnezia WG — она тоже работает и обходит блокировки благодаря обфускации. Главное отличие — она поднимает VPN для всей системы, а не только для MODX.

                      Плюсы SOCKS5 (ваш подход):
                      • Более стабильное решение;
                      • Работает точечно для MODX.
                      Плюсы Amnezia (мой подход):
                      • Проще для неопытных пользователей;
                      • Работает для всех приложений;
                      • Не требует правки системных файлов.
                      Минусы обоих:
                      • SOCKS5 — требует платную подписку.
                      • Amnezia — периодически блокируется, нужно обновлять конфиги.
                      Вывод: ваше решение идеально для тех, кто хочет минимального вмешательства в систему и готов платить за стабильность. Мое — для тех, кому нужен VPN для всего сразу.

                      Спасибо, что поделились инструкцией, она реально полезна.
                      Ivan K.
                      26 января 2026, 11:51
                      0
                      Ну зачем — это генеретика ИИ ??

                      По Amnezia WG: не у всех работает, возможно только у вас)
                      Подход с прокси: будет работать у всех!

                      Вот правильное заключение)
                      FastDevLab
                      26 января 2026, 12:13
                      0
                      ИИ всего лишь помог красиво сформулировать, не более.

                      Но по сути согласен:
                      • SOCKS5 — работает у ВСЕХ (проверено)
                      • Amnezia — у меня работает, но регионально блокируется
                      Ваше решение объективно стабильнее для публичной инструкции.

                      Моё больше как «лайфхак»

                      На этом спор думаю можно завершить. Каждый сам выберет то что ему ближе)
    Дима Касаткин
    21 января 2026, 01:52
    0
    Тут ведь речь о том, чтобы не на ПК скачивать, а сразу на сайте через менеджер пакетов устанавливать обновления пакетов или загружать новые. В этом случае на адрес репозитория обращается не ПК пользователя админки сайта, а сам сайт (отображая для пользователя лишь результаты).

    А в целом можно конечно скачивать пакет из репозитория на свой комп, потом загружать вручную на сайт и оттуда устанавливать, но это же не удобно :)

    Поэтому инструкция кажется очень полезной. Спасибо @Ivan K. что поделился!

    А я правильно понимаю, что это какая-то недоработка со стороны MODX? Настройки прокси стоковые (есть и в MODX v2.8.x который у меня оказался под рукой), но выходит, они не используются ядром для установки пакета (а для чего тогда используются...?!), т.е. это похоже на баг?
      Ivan K.
      21 января 2026, 09:13
      +1
      А я правильно понимаю, что это какая-то недоработка со стороны MODX?
      это можно назвать архитектурной недоработкой (или «техническим долгом»), которая стала критичной именно в современных реалиях.

      Настройки прокси в MODX изначально проектировались под протокол HTTP. Поля в админке есть, но ядро системы по умолчанию «под капотом» говорит библиотеке cURL: «Используй это как HTTP-прокси». Когда вы подсовываете системе SOCKS5, она просто не понимает, что с ним делать, потому что в интерфейсе отсутствует переключатель «Тип прокси».

      Отсутствие поддержки удаленного DNS (SOCKS5h): Cloudflare, за которым стоит репозиторий MODX требуют, чтобы DNS-запрос тоже шел через прокси. Обычные настройки MODX этого не умеют — они пытаются разрешить адрес сервера локально, получают блокировку и соединение обрывается.
        FastDevLab
        26 января 2026, 13:18
        0
        Это все понятно. Амнезия не совсем стандартный ВПН (она не меняет местоположение, там своеобразная система обфускации — она подменяет провайдера на Cloudflare) — в общем при ее включении, пакеты обновляются из админки MODX. Она не разблокирует все, к примеру с ней на зайти к примеру на gemini.google.com, но зато полезные сайты типа swiperjs.com начинают работать стабильно. В общем я до конца не понимаю как это работает — но работает.
          Дима Касаткин
          28 января 2026, 22:59
          0
          Как будто мы вообще про разное говорим. Если у тебя при подключении к VPN начинают скачиваться пакеты в modx, значит твой сайт подключается к vpn и использует шлюз из другой сети для выхода в интернет, а так это работает только если сайт тоже работает на твоём же компе, как делают некоторые локальную разработку на базе XAMPP, open server и прочих Denwer-ов. В статье речь о том, чтобы заставить сайт, лежащий на внешнем хостинге, с которого не работает скачивание пакетов, подключить к прокси, через который дополнения (пакеты) для CMS MODX начнут скачиваться нормально.

          Кстати говоря, я пока не встречал проблем скачивания на своих сайтах. Кроме случаев, когда изредка лагает репозиторий, и повторная попытка через пару минут пока помогает.
            Ivan K.
            28 января 2026, 23:12
            +1
            Кстати говоря, я пока не встречал проблем скачивания на своих сайтах. Кроме случаев, когда изредка лагает репозиторий, и повторная попытка через пару минут пока помогает.


            У меня на шаред-хостингах тоже все нормально скачивается, а вот на VDS один за другим перестает.

            И мой метод скорее всего на шаред-хостинге работать не будет, на шареде порты закрыты и не дают законектиться
              FastDevLab
              29 января 2026, 09:03
              +1
              а так это работает только если сайт тоже работает на твоём же компе, как делают некоторые локальную разработку на базе XAMPP, open server и прочих Denwer-ов. — Так я не локально разрабатываю. Сайты (их много, т.к. не только мои) на шаред хостингах (причем разных, дата центры в основном в МСК и Питере) (не VPS) — и у меня мой метод работает (именно на внешнем хостинге, на локальных соответственно тоже).
              Кстати говоря, я пока не встречал проблем скачивания на своих сайтах. Кроме случаев, когда изредка лагает репозиторий, и повторная попытка через пару минут пока помогает.
              У меня регулярно такие проблемы, в основном с большими пакетами типа TinyMCE RTE.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        21