You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

139 lines
5.3 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Настройка с помощью нескольких файлов
Программа 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` будет отличаться.
:::