annotate README.md @ 2:d19133be91ba

ndex and smarter parser
author Atarwn Gard <a@qwa.su>
date Mon, 09 Mar 2026 01:55:11 +0500
parents 3e7247db5c6e
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
1 # d2o
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
2
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
3 Минималистичный веб-сервер на Go с конфигурацией в формате ICF.
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
4
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
5 ## Структура проекта
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
6
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
7 ```
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
8 d2o/
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
9 go.mod
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
10 cmd/d2o/
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
11 main.go — точка входа, HTTP-обработчик, сборка листеров
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
12 icf/
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
13 icf.go — парсер формата ICF (переиспользуемая библиотека)
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
14 fcgi/
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
15 fcgi.go — минимальный FastCGI-клиент
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
16 ```
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
17
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
18 ## Сборка и запуск
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
19
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
20 ```sh
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
21 go build -o d2o ./cmd/d2o/
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
22 ./d2o # читает /etc/d2obase
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
23 ./d2o /path/to/config # альтернативный путь
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
24 ```
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
25
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
26 ---
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
27
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
28 ## Формат конфигурации ICF
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
29
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
30 **ICF (Inherited Configuration Format)** — текстовый формат правил вида «паттерн → директивы».
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
31 Вдохновлён синтаксисом bash и базами данных CoreDNS.
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
32
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
33 ### Основные правила синтаксиса
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
34
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
35 ```
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
36 ; Это комментарий
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
37
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
38 ; Переменная (без пробелов вокруг =)
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
39 KEY=value
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
40
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
41 ; Абстрактный блок (миксин)
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
42 @name
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
43 |> directive arg1 arg2
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
44
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
45 ; Конкретный блок с наследованием миксина
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
46 block.id @mixin
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
47 |> directive arg1 arg2
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
48
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
49 ; Блок с именованным capture-группой
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
50 <sub>.example.com
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
51 |> root /srv/$sub
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
52 ```
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
53
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
54 ### Переменные
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
55
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
56 Объявляются как `KEY=value` на уровне файла. Подставляются через `$KEY` в аргументах директив.
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
57
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
58 ```
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
59 WWW=/srv/www
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
60 CERT=/etc/acme/example.com
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
61
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
62 example.com
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
63 |> root $WWW/root
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
64 |> tls $CERT.{crt,key}
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
65 ```
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
66
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
67 ### Brace expansion
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
68
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
69 Аргумент `prefix.{a,b,c}` раскрывается в три отдельных аргумента: `prefix.a`, `prefix.b`, `prefix.c`.
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
70 Порядок важен — используется для `tls`, где первый аргумент сертификат, второй ключ.
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
71
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
72 ```
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
73 |> tls /etc/acme/example.com.{crt,key}
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
74 ; эквивалентно:
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
75 |> tls /etc/acme/example.com.crt /etc/acme/example.com.key
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
76 ```
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
77
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
78 ### Capture-группы
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
79
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
80 В идентификаторе блока `<name>` захватывает любую подстроку до следующего литерала.
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
81 `<_>` — анонимный wildcard, ничего не сохраняет.
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
82
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
83 ```
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
84 <sub>.example.com
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
85 |> root /srv/$sub ; $sub подставляется из захваченного значения
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
86
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
87 <_>.static.example.com
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
88 |> root /srv/static ; совпадает с чем угодно, capture не нужен
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
89 ```
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
90
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
91 Capture жадный слева: `<sub>.example.com` на запрос `a.b.example.com` даст `sub=a.b`.
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
92
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
93 ### Кавычки в аргументах
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
94
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
95 Аргументы с пробелами берутся в двойные кавычки:
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
96
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
97 ```
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
98 |> fcgi unix:/run/php-fpm.sock "*.php"
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
99 ```
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
100
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
101 ### Абстрактные блоки и наследование
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
102
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
103 `@name` задаёт набор директив без привязки к паттерну.
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
104 Конкретный блок наследует их через `block.id @name` — директивы миксина идут первыми, директивы блока их перекрывают.
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
105
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
106 ```
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
107 @base
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
108 |> port 80
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
109 |> port+tls 443
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
110
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
111 example.com @base
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
112 |> root /srv/www ; наследует port 80 и port+tls 443
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
113
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
114 other.com @base
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
115 |> root /srv/other ; то же самое
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
116 ```
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
117
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
118 ### Матчинг блоков
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
119
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
120 - Домен матчится точно (с учётом capture-групп).
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
121 - Путь матчится как префикс: блок `example.com/api` сработает на `/api/users`.
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
122 - При нескольких совпадениях выигрывает наиболее специфичный (больше совпавших литеральных символов).
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
123 - Сначала проверяется `host/path`, потом `host`.
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
124
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
125 ```
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
126 example.com
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
127 |> root /srv/www
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
128
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
129 example.com/api
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
130 |> rprx 127.0.0.1:8080 ; перекрывает блок выше для /api/*
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
131 ```
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
132
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
133 ---
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
134
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
135 ## Конфигурация d2o
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
136
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
137 Файл по умолчанию: `/etc/d2obase`
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
138
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
139 ### @d2o — настройки сервера
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
140
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
141 ```
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
142 @d2o
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
143 |> threads 512 ; GOMAXPROCS
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
144 ```
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
145
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
146 | Директива | Аргументы | Описание |
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
147 |------------|-----------|----------|
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
148 | `threads` | N | Количество потоков ОС (GOMAXPROCS) |
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
149
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
150 ### port — HTTP-листенер
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
151
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
152 ```
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
153 |> port 80
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
154 ```
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
155
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
156 | # | Тип | Описание |
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
157 |---|-------|--------------|
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
158 | 1 | `int` | Номер порта |
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
159
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
160 ### port+tls — HTTPS-листенер
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
161
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
162 ```
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
163 |> port+tls 443
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
164 ; сертификат берётся из директивы tls того же блока
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
165 ```
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
166
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
167 Знак `+` в имени директивы — обычный символ, не оператор.
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
168
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
169 | # | Тип | Описание |
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
170 |---|--------|-----------------------------------------------|
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
171 | 1 | `int` | Номер порта |
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
172 | 2 | `path` | Путь к сертификату (необязателен, если есть `tls`) |
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
173 | 3 | `path` | Путь к ключу (необязателен, если есть `tls`) |
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
174
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
175 ### tls — пути к сертификату и ключу
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
176
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
177 ```
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
178 |> tls /etc/acme/example.com.{crt,key}
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
179 ```
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
180
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
181 Используется как источник сертификата для `port+tls` в том же блоке, если пути не указаны явно.
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
182
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
183 | # | Тип | Описание |
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
184 |---|--------|-------------------|
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
185 | 1 | `path` | Путь к сертификату |
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
186 | 2 | `path` | Путь к ключу |
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
187
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
188 ### root — отдача статики
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
189
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
190 ```
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
191 |> root /srv/www/example.com
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
192 |> root /srv/www/example.com hide ; листинг запрещён (по умолчанию)
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
193 |> root /srv/www/example.com show ; листинг разрешён, index-файл index.html
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
194 |> root /srv/www/example.com show index.php index.html ; свои index-файлы
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
195 ```
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
196
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
197 | # | Тип | Описание |
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
198 |---|--------|---------------------------------|
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
199 | 1 | `path` | Корневая директория |
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
200 | 2 | `show\|hide` | Режим директорий (по умолчанию `hide`) |
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
201 | 3–14 | `filename` | Index-файлы (только с `show`), проверяются по порядку |
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
202
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
203 При `show`: сначала ищутся index-файлы по списку, если ни один не найден — отдаётся листинг директории.
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
204 При `hide` или без аргумента: запрос к директории возвращает 403.
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
205
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
206 ### fcgi — FastCGI
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
207
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
208 ```
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
209 |> fcgi unix:/run/php-fpm.sock
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
210 |> fcgi unix:/run/php-fpm.sock "*.php" ; только .php файлы
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
211 |> fcgi 127.0.0.1:9000 "*.php"
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
212 ```
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
213
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
214 | # | Тип | Описание |
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
215 |---|---------|----------------------------------------------------|
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
216 | 1 | `addr` | Адрес сокета: `unix:/path` или `host:port` |
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
217 | 2 | `glob` | Паттерн файлов (по умолчанию `*`, все запросы) |
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
218
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
219 Если glob не совпадает, запрос падает в `root` (если задан).
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
220
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
221 ### rprx — обратный прокси
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
222
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
223 ```
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
224 |> rprx 127.0.0.1:3000
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
225 |> rprx http://127.0.0.1:3000
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
226 ```
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
227
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
228 | # | Тип | Описание |
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
229 |---|-------|---------------------------------|
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
230 | 1 | `url` | Адрес backend (схема необязательна, по умолчанию `http://`) |
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
231
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
232 ### Приоритет директив
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
233
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
234 При одновременном наличии нескольких директив порядок обработки: **rprx > fcgi > root**.
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
235
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
236 ---
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
237
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
238 ## Пример полного конфига
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
239
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
240 ```
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
241 ; /etc/d2obase
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
242
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
243 ACME=/etc/acme/qwaderton.org
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
244 WWW=/srv/www/qwaderton.org
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
245
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
246 @d2o
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
247 |> threads 512
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
248
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
249 @ports
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
250 |> tls $ACME.{crt,key}
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
251 |> port 80
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
252 |> port+tls 443
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
253
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
254 qwaderton.org @ports
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
255 |> root $WWW/root show index.php index.html
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
256
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
257 qwaderton.org/webfeather @ports
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
258 |> root $WWW/root/webfeather
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
259 |> fcgi unix:/run/php-fpm.sock *.php
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
260
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
261 <sub>.qwaderton.org @ports
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
262 |> root $WWW/$sub
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
263 ```
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
264
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
265 ---
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
266
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
267 ## Известные ограничения
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
268
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
269 - **Один миксин на блок.** Множественное наследование не поддерживается.
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
270 - **Brace expansion без вложенности.** `{a,{b,c}}` не работает.
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
271 - **FastCGI — один запрос на соединение.** Keep-alive с FPM не реализован.
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
272 - **Нет HTTP→HTTPS редиректа** из коробки — нужно реализовывать отдельным блоком на порту 80.
3e7247db5c6e show index.html
Atarwn Gard <a@qwa.su>
parents:
diff changeset
273 - **Нет hot reload** конфига — требуется перезапуск процесса.