В чем разница между ^ ~ и ~ в конфигурации nginx

I ' m, настраивая nginx, и наткнулся на «^ ~», который, похоже, имеет те же функции, что и «~». Я прочитал документацию здесь , но мне она все еще непонятна. Так чем же отличаются следующие местоположения?

location ~ /images/* {
        try_files  $uri $uri/ @images;
    }
location ^~ /images/* {
        try_files  $uri $uri/ @images;
    }
0
задан 22 September 2018 в 01:33
1 ответ

~ и ^ ~ совершенно не похожи. Первый указывает на совпадение с регулярным выражением с учетом регистра ( ~ * будет таким же без учета регистра), но второй вариант ^ ~ означает, что если этот блок местоположения совпадает, 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 увидит, что это соответствует, и немедленно использует его, без поиска лучших совпадений регулярных выражений в дальнейшем.

Эта статья объясняет это немного лучше, чем официальная документация .

2
ответ дан 4 December 2019 в 13:23

Теги

Похожие вопросы