# конспект · шаг 4 из 4
Конспект: наследование и три исключения
Директивы наследуются вниз по контекстам, но у этого правила есть три исключения, и все три встречаются каждый день.
Основное правило
Директива, заданная в http, действует во всех server; заданная в server -
во всех location. Ближайшее к месту значение побеждает.
http {
gzip on; # для всех сайтов
server {
root /var/www/shop; # для всего сайта
location /downloads/ {
root /mnt/big-disk; # тут корень другой - ближайший побеждает
}
}
}
Три исключения
| Исключение | Что происходит |
|---|---|
| директивы-списки замещаются целиком | один add_header в location отменяет все унаследованные. Так же ведут себя proxy_set_header, fastcgi_param, limit_req, limit_conn, access_log, error_page, allow/deny |
| обработчик содержимого не наследуется | вложенный location внутри location с proxy_pass не проксирует: обработчика у него нет, и запрос уходит на диск. То же с try_files |
alias живёт только в location |
наследовать его неоткуда: выше по дереву он запрещён |
Как проверять, а не гадать
add_header X-Debug "здесь" always; # временно в спорный блок
$ команда
curl -I http://shop.local/path/
Заголовок пришёл - блок выбран и директива действует. Второй способ, лучше - собрать вопрос в задачу симулятора и посмотреть трассу.
Ловушки джокера
- «Я же добавил заголовок в http». Достаточно одного
add_headerв location - и все заголовки уровнем выше исчезают, включая заголовки безопасности. С 1.29.3 поведение управляется директивойadd_header_inherit(on/off/merge), но по умолчанию правило прежнее: всё или ничего. - Один
proxy_set_headerв location стирает остальные. Вместе с ними бэкенд теряет настоящий адрес клиента и схему запроса, хотя добавленная строка про адреса ничего не говорила. - Вложенный location ради одной мелочи ломает проксирование. Симптом - 404 на адресах, которые вчера работали, или отдача файла с диска вместо ответа приложения.
- Все три исключения включает ДОБАВЛЕНИЕ строки, а не удаление. Поэтому правку конфига читают не по диффу, а по вопросу «какой блок она затрагивает целиком».
Комментарии
Пока нет комментариев. Будь первым!
Оставить комментарий