Nginx: что значит ^~в блоке location
Location ^~ /images/ {...}
Как понимать такую конструкцию, когда используется?
Ответы (1 шт):
По сути сами символы ^~ можно перевести как "не регулярное выражение".
А реальное применение этому способу сопоставления адресов заключается в том, что такое сопоставление будет иметь бо́льший приоритет чем сопоставления по регулярному адресу.
Предположим, что мы хотим, чтобы все файлы сайта с расширением .jpg максимально кэшировались в браузере. Имеем сопоставление по регулярному выражению:
location ~ \.jpg$ {
expires max;
}
Всё работает и файлы .jpg отправляются с соответствующими заголовками Cache-Control/Expires.
Через некоторое время, мы решили, что любые файлы в отдельно взятой папке /images/foo/, включая .jpg изображения не должны кэшироваться браузером вовсе.
Мы не можем использовать сопоставление по обычному префиксу. Это не сработает:
location /images/foo/ {
expires -1;
}
Не сработает именно потому что в NGINX, сопоставления этого вида (обычные, по префиксу), имеют меньший приоритет, чем с регулярными выражениями.
С другой стороны сопоставление следующего формата даст желаемый результат:
location ^~ /images/foo/ {
expires -1;
}
Таким образом ^~ это префиксное сопоставление адресов в NGINX конфигурации, имеющее приоритет над сопоставлениями по регулярному выражению.