Nginx: что значит ^~в блоке location

Location ^~ /images/ {...}

Как понимать такую конструкцию, когда используется?


Ответы (1 шт):

Автор решения: Danila Vershinin

По сути сами символы ^~ можно перевести как "не регулярное выражение".

А реальное применение этому способу сопоставления адресов заключается в том, что такое сопоставление будет иметь бо́льший приоритет чем сопоставления по регулярному адресу.

Предположим, что мы хотим, чтобы все файлы сайта с расширением .jpg максимально кэшировались в браузере. Имеем сопоставление по регулярному выражению:

location ~ \.jpg$ {
   expires max;
}

Всё работает и файлы .jpg отправляются с соответствующими заголовками Cache-Control/Expires.

Через некоторое время, мы решили, что любые файлы в отдельно взятой папке /images/foo/, включая .jpg изображения не должны кэшироваться браузером вовсе.

Мы не можем использовать сопоставление по обычному префиксу. Это не сработает:

location /images/foo/ {
    expires -1;
}

Не сработает именно потому что в NGINX, сопоставления этого вида (обычные, по префиксу), имеют меньший приоритет, чем с регулярными выражениями.

С другой стороны сопоставление следующего формата даст желаемый результат:

location ^~ /images/foo/ {
   expires -1;
}

Таким образом ^~ это префиксное сопоставление адресов в NGINX конфигурации, имеющее приоритет над сопоставлениями по регулярному выражению.

→ Ссылка