# конспект · шаг 5 из 5
Конспект: вложенные и именованные location
Вложенные и именованные location: когда они помогают и где перестают работать.
Вложенные
Внутри выбранного location поиск повторяется - по тому же алгоритму и по полному URI.
location /uploads/ {
root /var/www;
location ~ \.(jpg|png)$ {
expires 30d; # у картинок свой срок кеша
}
}
Что вообще разрешено вкладывать
Проверяется при загрузке, а не молча:
| Внешний блок | Что можно вложить |
|---|---|
префикс /api/ |
префикс, точное и регулярку - если путь начинается с /api/ |
регулярка ~ ^/api/ |
только другую регулярку |
именованный @backend |
ничего |
nginx: [emerg] location "/cart" is outside location "/api/"
nginx: [emerg] location "/x/" cannot be inside the named location "@backend"
Порядок регулярок при вложенности
Сначала спрашиваются регулярки того уровня, где остановился поиск по префиксам, и только потом - уровнем выше. Добавив регулярку во вложенный блок, ты меняешь маршрут для всех адресов внутри этого префикса.
Именованные location
location @fallback {
proxy_pass http://backend:3000;
}
location / {
try_files $uri $uri/ @fallback;
}
Именованный блок не участвует в обычном поиске - в него попадают только
try_files и error_page. Это способ вынести общий «а если ничего не нашлось»
в одно место.
error_page ловит ошибки самого nginx, а не ответ бэкенда: приложение,
вернувшее 502, доедет до клиента как есть. Перехват включает
proxy_intercept_errors on; - и после него твоя страница заменит ЛЮБУЮ ошибку
приложения, включая осмысленные 404.
Ловушки джокера
- Вложенность не сужает поиск. Внутренние блоки сравниваются с полным
URI, а не с остатком после префикса.
location /cartвнутриlocation /api/не «не совпадёт» - с ним конфиг вообще не загрузится. Правильноlocation /api/cart. proxy_passвложенным блоком не наследуется. Завёл внутри блока с проксированием ещё один location - запросы оттуда пойдут на диск, а не на бэкенд.- Три уровня вложенности читаются плохо. Если рябит - разложи маршруты
плоским списком (
/api/v1/,/api/v2/): длиннее, зато ответ на вопрос «какой блок обработает запрос» виден сразу.
Комментарии
Пока нет комментариев. Будь первым!
Оставить комментарий