Файл конфигурации
Секция main
workers число
Создаёт потоки для обработки соединений, чтения/записи данных между клиентом и сервером.
threads число
Создаёт потоки для обработки запросов и формирования тела ответа.
reload soft | hard
Режим перезагрузки.
soft
- перезагрузка приложения с удержанием активных соединений.hard
- перезагрузка приложения с принудительным закрытием соединений.
read_buffer число
Размер буфера для чтения и записи данных в сокет. Указывается в байтах.
client_max_body_size число
Максимальный размер загружаемого контента в байтах.
tmp строка
Путь до директории временных файлов.
gzip массив строк
Перечень mime-типов для сжатия. Если сжатие контента не требуется - оставьте поле пустым.
Секция migrations
source_directory строка
Путь до директории с миграциями.
Секция servers
В секции перечисляется список серверов.
domains массив строк
В перечне доменов можно указать полное имя домена или шаблон.
example.com
*.example.com
s(\\d+).example.com
s(.*).example.com
Символ (*) может указываться без точки только в начале или конце шаблона. Это было сделано для простоты указания поддоменов.
В остальных случаях шаблон задаётся как регулярное выражение.
ip строка
Ip-адрес сервера, например 127.0.0.1
port число
Порт сервера. Обычно 80
или 443
.
root строка
Абсолютный путь до webroot
директории, где находятся ваши страницы, скрипты, стили и т.д.
index строка
Поиск файла по умолчанию, если указана директория в качестве ресурса.
При запросе к ресурсу https://example.com/directory
сервер сформирует адрес https://example.com/directory/index.html
http объект
В секции указан перечень маршрутов с прикрепленными к ним обработчиками и список редиректов.
routes объект
Маршруты задаются в виде объектов.
...
"http": {
"routes": {
// Путь до ресурса
"/": {
// Доступные методы взаимодействия с ресурсом
"GET": [
// Путь до разделяемого файла с обработчиками для ресурса
"/var/www/server/build/exec/handlers/libindexpage.so",
// Название метода (функции), который будет вызван запросом
"get"
],
"POST": ["/var/www/server/build/exec/handlers/libindexpage.so", "post"],
"DELETE": ["/var/www/server/build/exec/handlers/libindexpage.so", "delete"]
},
"/update": {
"PATCH": ["/var/www/server/build/exec/handlers/libupdatepage.so", "patch"]
}
...
},
...
},
...
Путь до ресурса можно указать в виде регулярного выражения.
redirects объект
Редиректы представлены в виде пары существующий маршрут
: новый маршрут
.
{
...
"redirects": {
"/number/(\\d)/(\\d)": "/digit/{1}/{2}",
"(.*)": "https://example.com{1}"
},
...
}
Существующий маршрут - это шаблон регулярного выражения или точный путь к ресурсу.
Новый маршрут - путь к ресурсу с возможностью вставки группы символов из регулярного выражения.
Для этого используются фигурные скобки с номером группы {1}
.
Номер группы начинается с 1
.
websockets объект
Структура секции такая же как в http.
databases объект
ip общий - ip-адрес сервера БД
port общий - порт
user общий - логин пользователя
password общий - пароль пользователя
dbname postgresql, mysql - название базы данных
connection_timeout postgresql - длительность ожидания в сек. перед установкой соединения.
migration postgresql, mysql - применять миграции для базы данных
dbindex redis - индекс базы данных
...
"databases": {
"postgresql": [
{
"ip": "127.0.0.1",
"port": 5432,
"dbname": "dbname",
"user": "root",
"password": "",
"connection_timeout": 3,
"migration": true
}
],
"mysql": [
{
"ip": "127.0.0.1",
"port": 3306,
"dbname": "dbname",
"user": "root",
"password": "",
"migration": false
}
],
"redis": [
{
"ip": "127.0.0.1",
"port": 6379,
"dbindex": 0,
"user": "",
"password": ""
}
],
},
...
tls объект
Для конфигурации защищенного соединения необходимо указать путь до сертификата, приватного ключа и перечислить шифры.
Если защищиенное соединение не требуется, то удалите секцию из конфигурационного файла.
fullchain строка
Путь до сертификата или цепочки сертификатов.
private строка
Путь до файла с приватным ключом.
ciphers строка
Список шифров разделенных пробелами.
Секция mimetypes
В секции указывается перечень mime-типов и соответствующие им расширения файлов.
Пример файла
{
"main": {
"workers": 1,
"threads": 1,
"reload": "hard",
"read_buffer": 16384,
"client_max_body_size": 110485760,
"tmp": "/tmp",
"gzip": [
"text/plain",
"text/html",
"text/css",
"application/javascript",
"application/json"
]
},
"migrations": {
"source_directory": "/var/www/server/migrations"
},
"servers": {
"s1": {
"domains": [
"example1.com",
"*.example1.com",
"(a1|a2|a3).example1.com",
"(.1|.*|a3).example1.com"
],
"ip": "127.0.0.1",
"port": 80,
"root": "/var/www/www.example1.com/web",
"index": "index.html",
"http": {
"routes": {
"/": {
"GET": ["/var/www/server/build/exec/handlers/libindexpage.so", "get"]
},
"/wss": {
"GET": ["/var/www/server/build/exec/handlers/libindexpage.so", "websocket"]
}
},
"redirects": {
"/section1/(\\d+)/section2/(\\d+)/section3": "/one/{1}/two/{2}/three",
"/one/\\d+/two/\\d+/three": "/",
"/user": "/persons",
"/user(.*)/(\\d)": "/user-{1}-{2}"
}
},
"websockets": {
"routes": {
"/": {
"GET": ["/var/www/server/build/exec/handlers/libwsindexpage.so", "echo"]
}
}
},
"databases": {
"postgresql": [
{
"ip": "127.0.0.1",
"port": 5432,
"dbname": "dbname",
"user": "root",
"password": "",
"connection_timeout": 3,
"migration": true
}
],
"mysql": [
{
"ip": "127.0.0.1",
"port": 3306,
"dbname": "dbname",
"user": "root",
"password": "",
"migration": false
}
],
"redis": [
{
"ip": "127.0.0.1",
"port": 6379,
"dbindex": 0,
"user": "",
"password": ""
}
]
},
"tls": {
"fullchain": "/var/www/server/cert/fullchain.pem",
"private": "/var/www/server/cert/privkey.pem",
"ciphers": "TLS_AES_256_GCM_SHA384 ..."
}
},
"s2": {
"domains": [
"example2.com:8080"
],
"ip": "127.0.0.1",
"port": 8080,
"root": "/var/www/example2.com/web",
"index": "index.html",
"http": {
"routes": {
"/": {
"GET": ["/var/www/server/build/exec/handlers/libindexpage.so", "index"]
}
}
}
}
},
"mimetypes": {
"text/plain": ["txt"],
"text/html": ["html", "htm", "shtml"],
"text/css": ["css"],
"text/xml": ["xml"],
"image/gif": ["gif"],
"image/jpeg": ["jpeg", "jpg"],
"application/json": ["json"],
"application/javascript": ["js"],
"image/png": ["png"],
"image/svg+xml": ["svg", "svgz"],
"image/tiff": ["tif", "tiff"],
"image/vnd.wap.wbmp": ["wbmp"],
"image/webp": ["webp"],
"image/x-icon": ["ico"],
"image/x-jng": ["jng"],
"image/x-ms-bmp": ["bmp"],
"audio/mpeg": ["mp3"],
"audio/ogg": ["ogg"],
"audio/x-m4a": ["m4a"],
"video/mp4": ["mp4"],
"video/mpeg": ["mpeg", "mpg"],
"video/quicktime": ["mov"],
"video/webm": ["webm"],
"video/x-ms-wmv": ["wmv"],
"video/x-msvideo": ["avi"]
}
}