Много важна директива.
location optional_modifier location_match { . . . }
Модификаторът в блока за местоположение не е задължителен. Наличието на модификатор в блока за местоположение ще позволи на NGINX да третира URL по различен начин. Няколко най-често срещани модификатора са: ● (няма): Ако в блок за местоположение не присъстват модификатори, тогава поисканият URI ще бъде съпоставен с началото на заявения URI. ● =: Знакът за равенство се използва за точно съпоставяне на блок за местоположение спрямо заявен URI. ● ~: Знакът тилда се използва за съвпадение на регулярен израз, чувствителен към малки и главни букви, срещу заявен URI. ● ~*: Тилдата, последвана от знака звездичка, се използва за съвпадение на регулярен израз без значение за главни и малки букви срещу заявен URI. ● ^~: ^, последван от знака тилда, се използва за извършване на съвпадение на най-дългия нерегулярен израз спрямо заявения URI. Ако заявеният URI попадне на такъв блок за местоположение, няма да има по-нататъшно съпоставяне. Няколко примера:
server { listen 80 default_server; listen 192.168.1.1:80 default_server; listen [::]:80 default_server; root /var/www/html; # Add index.php to the list if you are using PHP index index.html index.htm index.nginx-debian.html; server_name _; #Обичаен префикс location (Пример 1) location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; } #Обичаен префикс location (Пример 2) location /index { root /var/www/site; } #Обичаен префикс location (Пример 3) location /text { } #Точно съвпадене (Пример 4) location = /2.txt { root /var/www/html; } #Приоритетен location, без търсене RegEx (Пример 5) location ^~ /images { root /var/www/html; } #Регулярен location, без да отчита регистъра на букви (Пример 6) location ~* \.(png|ico|gif|jpg|jpeg|css|js)$ { root /var/www/html; } #Регулярен location, с отчет на регистъра на букви (Пример 7) location ~ \.(PnG|Ico|gif|jpg|jpeg|Css|JS)$ { root /var/www/site; }
Първо се обработват точните location, след това се обработват регулярните location. При точните location няма значение порядъка на съставяне (кой е първи кой втори и т.н.). При регулярните има значение порядъка. Изпълняват се един след друг както са описани. Пример 1 - NGINX местоположение, съответстващо на всички заявки. Стандартен location. Зарежда всичко намиращо се след / (root папката). Примерно търси след / index файловете, като index.html, index.htm, index.nginix-debian.html. Ако не ги открие връща грешка 404. Също така търси и папки след root папката. Пример 2 - NGINX блок за местоположение за директория. Както на горния пример зарежда всичко след /index. За пример може да зареди /index, /index/1, /index/2 и т.н. Съответно може да не са папки след /index папката, може да са файлове. Пример 3 - Пример 4 - NGINX местоположение, съответстващо на точния URL адрес. Следователно знакът за равенство в следния блок за местоположение принуждава точно съвпадение с искания път и след това спира търсенето на повече съвпадения. Пример 5 - NGINX местоположение RegEx Пример. Модификаторът ^~ в следния блок за местоположение води до съвпадение на регулярен израз, чувствителен към главни и малки букви. Следователно URI /images или /images/logo.png ще бъдат съпоставени, но търсенето спира веднага щом бъде намерено съвпадение. Пример 6 - NGINX блок за местоположение за файлови типове изображение/css/js. Модификаторът ~* в следващия блок за местоположение съвпада с всяка заявка (без значение от регистър на буквите), завършваща с png, ico, gif, jpg, jpeg, css или js. Всички заявки към папката обаче /images/ще бъдат обслужвани от предишния блок за местоположение. Пример 7 - NGINX местоположение RegEx съвпадение, чувствително към главни и малки букви. Модификаторът ~ в следния блок за местоположение води до съвпадение на регулярен израз, чувствително към главни и малки букви, но не спира да търси по-добро съвпадение.