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