# конспект · шаг 1 из 1
Конспект раздела: язык конфига
Раздел про сам язык: как устроен конфиг, что откуда наследуется и откуда берутся значения, зависящие от запроса.
Три темы
СИНТАКСИС аргументы читаются до ; или { - отсюда всё остальное
НАСЛЕДОВАНИЕ вниз по контекстам, ближайшее побеждает + три исключения
ПЕРЕМЕННЫЕ $uri против $request_uri, $http_*, свои через set и map
Что нужно помнить дословно
- Аргументы директивы читаются, пока не встретится
;или{. Номер строки в ошибке - место, где разбор остановился, а не где ошибка. - Директива работает только в своих контекстах, и ставить её надо в самый узкий из разрешённых.
- Директивы-списки замещаются целиком: один
add_headerв location отменяет все унаследованные. С 1.29.3 чинится строкойadd_header_inherit merge;на уровнеhttp. - Обработчик содержимого не наследуется: вложенный location внутри
location с
proxy_passне проксирует. $uriменяется,$request_uri- нет. Редирект пишут через второй.- Своя переменная - только через
setилиmap.
Отладочные приёмы раздела
$ команда
nginx -T # итоговый конфиг со всеми include
nginx -t # синтаксис и номер строки
curl -I http://shop.local/path/ # какие заголовки реально пришли
add_header X-Debug "$uri | $request_uri | $host" always; # временно, чтобы увидеть
Ошибки, которые ищут дольше всего
| Ошибка | Как выглядит |
|---|---|
пропущенная ; перед блоком |
directive "…" is not terminated by ";", строкой ниже |
пропущенная ; перед директивой-списком |
ничего: конфиг верен, сайт отвечает 404 на всё |
add_header в location |
заголовки безопасности исчезли с части адресов |
add_header без always |
заголовки исчезли со страниц ошибок |
| вложенный location у прокси | 404 или чужой файл вместо ответа приложения |
редирект через $uri |
пропала строка запроса |
| директива не в том контексте | directive is not allowed here - тут строка верная |
Чек-лист: что ты должен уметь объяснить
- Почему ошибка синтаксиса показывает не ту строку и когда её нет вовсе.
- Чем контекст
httpотличается отserverи почему шире не значит надёжнее. - Три исключения из правила наследования и что все три включает добавление строки.
- Что делает
add_header_inherit mergeи с какой версии она есть. - Разницу
$uriи$request_uriи когда она проявляется. - Как за минуту проверить, действует ли директива в конкретном блоке.
Комментарии
Пока нет комментариев. Будь первым!
Оставить комментарий