# Настройка с помощью нескольких файлов Программа Xray поддерживает использование нескольких файлов конфигурации. Основная цель использования нескольких файлов конфигурации — разделение настроек модулей с разными функциями для удобства управления и обслуживания. Эта функция в основном предназначена для обогащения экосистемы Xray. Например, для клиентских GUI обычно реализуются только фиксированные функции, такие как выбор узла, и слишком сложные конфигурации трудно реализовать графически. Можно оставить только один пользовательский каталог конфигурации `confdir` для настройки сложных функций. Для сценариев развертывания сервера достаточно добавить файлы в `confdir` для настройки различных протоколов. ## Запуск с несколькими файлами ::: tip В информации о запуске будет указан каждый считываемый файл конфигурации. Убедитесь, что порядок считывания соответствует ожидаемому. Вы можете контролировать порядок, добавляя префиксы с номерами к именам файлов. Например, `01_имя_файла`, `02_имя_файла`, чем больше число, тем позже файл будет обработан. ::: ```shell $ xray run -confdir /etc/xray/confs ``` Также можно использовать `Xray.location.confdir` или `Xray_LOCATION_CONFDIR` для указания `confdir`. Параметр `-confdir` имеет приоритет над переменной среды. Если параметр указывает на допустимый каталог, значение переменной среды игнорируется. ## Правила ### Обычные объекты (`{}`) Последующие объекты верхнего уровня перезаписывают или дополняют предыдущие. ### Массивы (`[]`) В конфигурации JSON `inbounds` и `outbounds` имеют структуру массива, для них действуют особые правила: - Поиск существующего элемента с тем же `tag` для перезаписи. Если элемент не найден: - Для `inbounds`: добавляется в конец (порядок элементов в `inbounds` не имеет значения). - Для `outbounds`: добавляется в начало (по умолчанию используется первый выход в `outbounds`); но если имя файла содержит `tail` (регистр не имеет значения), элемент добавляется в конец. ## Пример конфигурации Предположим, что в папке `confs` есть следующие три файла конфигурации: - 01.json ```json { "log": { "loglevel": "warning" }, "inbounds": [ { "tag": "socks", "protocol": "socks", "listen": "0.0.0.0", "port": 8888 } ], "outbounds": [ { "tag": "direct", "protocol": "freedom" } ] } ``` - 02.json ```json { "log": { "loglevel": "debug" }, "inbounds": [ { "tag": "socks", "protocol": "socks", "listen": "127.0.0.1", "port": 1080 } ], "outbounds": [ { "tag": "block", "protocol": "blackhole" } ] } ``` - 03_tail.json ```json { "outbounds": [ { "tag": "direct2", "protocol": "freedom" } ] } ``` Три конфигурации будут объединены следующим образом: ```json { "log": { "loglevel": "debug" // объект верхнего уровня перезаписывает предыдущий }, "inbounds": [ { "tag": "socks", // перезапись элемента с тем же tag "protocol": "socks", "listen": "127.0.0.1", "port": 1080 } ], "outbounds": [ { "tag": "block", // добавлено в начало outbounds "protocol": "blackhole" }, { "tag": "direct", "protocol": "freedom" }, { "tag": "direct2", // добавлено в конец, так как имя файла 03_tail.json содержит tail "protocol": "freedom" } ] } ``` ::: tip Вы можете использовать команду `xray run -confdir=./confs -dump` для просмотра объединенной конфигурации. Однако, поскольку ядро использует формат данных protobuf, формат вывода конфигурации для параметра `-dump` будет отличаться. :::