I ' m, настраивая nginx, и наткнулся на «^ ~», который, похоже, имеет те же функции, что и «~». Я прочитал документацию здесь , но мне она все еще непонятна. Так чем же отличаются следующие местоположения?
location ~ /images/* {
try_files $uri $uri/ @images;
}
location ^~ /images/* {
try_files $uri $uri/ @images;
}
~
и ^ ~
совершенно не похожи. Первый указывает на совпадение с регулярным выражением с учетом регистра ( ~ *
будет таким же без учета регистра), но второй вариант ^ ~
означает, что если этот блок местоположения совпадает, nginx
должен прекратить поиск лучшего совпадения (регулярное выражение). Само по себе это не совпадение с регулярным выражением.
Пример: если у вас есть блоки местоположения, подобные приведенным ниже,
location /images/ {
# variant 1
}
location ~* .(png|gif|ico|jpg|jpeg)$ {
# variant 2
}
, и URI, например images / test1.png
, nginx
сначала рассмотрит вариант 1 как возможное совпадение. но продолжайте поиск других блоков местоположения и в конечном итоге используете вариант 2 как самый длинный совпадающий блок и используйте вариант 1 только в том случае, если он не находит ничего лучше. В этом примере images / test2.tif
соответствовал бы только варианту 1.
Однако, если у вас есть
location ^~ /images/ {
# variant 1
}
в качестве варианта 1, nginx увидит, что это соответствует, и немедленно использует его, без поиска лучших совпадений регулярных выражений в дальнейшем.
Эта статья объясняет это немного лучше, чем официальная документация .