предисловие
Местоположение — это очень важная конфигурация в Nginx. В этой статье основное внимание уделяется настройке местоположения и некоторым мерам предосторожности.
грамматика
Что касается местоположения, вот простой пример конфигурации:
http {
server {
listen 80;
server_name www.yayujs.com;
location / {
root /home/www/ts/;
index index.html;
}
}
}
примерно означает, что при посещенииwww.yayujs.com
из80
порт, возвращение/home/www/ts/index.html
документ.
Давайте посмотрим на конкретный синтаксис Location:
location [ = | ~ | ~* | ^~ ] uri { ... }
Обратите внимание на квадратные скобки[ = | ~ | ~* | ^~ ]
,в|
Содержимое с разделителями представляет синтаксис, который вы можете использовать, где:
-
=
Указывает на точное совпадение, например:
location = /test {
return 200 "hello";
}
# /test ok
# /test/ not ok
# /test2 not ok
# /test/2 not ok
-
~
Указывает на регулярное соответствие с учетом регистра, например:
location ~ ^/test$ {
[ configuration ]
}
# /test ok
# /Test not ok
# /test/ not ok
# /test2 not ok
-
~*
Указывает на регулярное соответствие без учета регистра.
location ~* ^/test$ {
[ configuration ]
}
# /test ok
# /Test ok
# /test/ not ok
# /test2 not ok
-
^~
Указывает, что uri начинается со строки
location ^~ /images/ {
[ configuration ]
}
# /images/1.gif ok
И когда вы не используете эти синтаксисы и просто пишете uri:
/
Указывает на общее совпадение:
location / {
[ configuration ]
}
# /index.html ok
location /test {
[ configuration ]
}
# /test ok
# /test2 ok
# /test/ ok
соответствующий заказ
При наличии нескольких местоположений их соответствующие ссылки на порядокОфициальная документация Nginxэто:
Расположение может быть определено строкой префикса или регулярным выражением.Регулярные выражения указываются с предшествующим модификатором «~*» (для совпадения без учета регистра) или модификатором «~» (для сопоставления с учетом регистра). .Чтобы найти местоположение, соответствующее заданному запросу, nginx сначала проверяет местоположения, определенные с помощью строк префикса (префиксные местоположения).Среди них выбирается и запоминается местоположение с самым длинным совпадающим префиксом.Затем проверяются регулярные выражения, в порядке их появление в конфигурационном файле.Поиск регулярных выражений прекращается на первом совпадении и используется соответствующая конфигурация.Если совпадения с регулярным выражением не найдено, то используется конфигурация расположения префикса, запомненная ранее.
Если самое длинное совпадающее место префикса имеет модификатор «^~», то регулярные выражения не проверяются.
Также с помощью модификатора «=» можно определить точное совпадение URI и местоположения. Если найдено точное совпадение, поиск прекращается. Например, если часто встречается запрос «/», определение «location = /» ускорит обработку этих запросов, так как поиск прекращается сразу после первого сравнения, такая локация не может явно содержать вложенных локаций.
После перевода это:
Существует два определения местоположения:
- строка префикса
- Регулярное выражение (регулярное выражение), которому конкретно предшествует
~*
и~
модификатор
И порядок сопоставления мест таков:
- Проверьте местоположения, используя строку префикса, выберите самое длинное совпадение среди местоположений, используя строку префикса, и сохраните результат.
- Если он соответствует
=
URI модификатора, немедленно прекратите сопоставление - Если он соответствует
^~
URI модификатора, он также сразу перестает соответствовать. - Затем проверьте регулярное выражение в порядке файла определения и остановитесь, если оно соответствует
- Если регулярное выражение не совпадает, используйте ранее сохраненную строку префикса.
Подводя итог еще раз:
По порядку порядок строки префикса не важен, он определяется в соответствии с длиной совпадения, а регулярное выражение определяется в соответствии с порядком.
в приоритете,=
модификатор самый высокий,^~
Второй — обычный, а последний — соответствие строки префикса.
Рассмотрим несколько простых примеров:
server {
location /doc {
[ configuration A ]
}
location /docu {
[ configuration B ]
}
}
# 请求 /document 使用 configuration B
# 虽然 /doc 也能匹配到,但在顺序上,前缀字符串顺序不重要,按照匹配长度来确定
server {
location ~ ^/doc {
[ configuration A ]
}
location ~ ^/docu {
[ configuration B ]
}
}
# 请求 /document 使用 configuration A
# 虽然 ~ ^/docu 也能匹配到,但正则表达式则按照定义顺序
server {
location ^~ /doc {
[ configuration A ]
}
location ~ ^/docu {
[ configuration B ]
}
}
# 请求 /document 使用 configuration A
# 虽然 ~ ^/docu 也能匹配到,但 ^~ 的优先级更高
server {
location /document {
[ configuration A ]
}
location ~ ^/docu {
[ configuration B ]
}
}
# 请求 /document 使用 configuration B
# 虽然 /document 也能匹配到,但正则的优先级更高
Разница между корнем и псевдонимом
Когда мы устанавливаем это такroot
когда:
location /i/ {
root /data/w3;
}
по запросу/i/top.gif
,/data/w3/i/top.gif
будет возвращен.
Когда мы устанавливаем это такalias
когда:
location /i/ {
alias /data/w3/images/;
}
по запросу/i/top.gif
,/data/w3/images/top.gif
будет возвращен.
На первый взгляд они очень похожи, но если присмотреться, то можно увидеть разницу между ними.root
+ location
пока используется псевдонимalias
заменятьlocation
, поэтому последний путь в корне имеет/i/
, а последний путь в алиасе не имеет/i/
.
Итак, если вы определяете путь, используя псевдоним, например:
location /images/ {
alias /data/w3/images/;
}
На самом деле использование root было бы лучше:
location /images/ {
root /data/w3;
}
корень на сервере и местоположении
root можно использовать как на сервере, так и в локации, например:
http {
server {
listen 80;
server_name www.yayujs.com;
root /home/www/website/;
location / {
root /home/www/ts/;
index index.html;
}
}
}
Если оба присутствуют, что является приоритетным?
Проще говоря, это принцип близости.Если расположение может совпадать, используется корневая конфигурация в расположении, а корень на сервере игнорируется.Если расположение не совпадает, используется корневая конфигурация на сервере.
серия статей
Серия по созданию блога — это единственная серия практических руководств, которые я написал до сих пор, объясняя, как использовать VuePress для создания блога и развертывания его на GitHub, Gitee, персональных серверах и других платформах.
- Статья, которая поможет вам создать блог с помощью VuePress + GitHub Pages
- Учебник, который научит вас синхронизировать код GitHub и Gitee.
- Еще не используете GitHub Actions? проверить это
- Как Gitee автоматически развертывает страницы? Все еще используйте GitHub Actions!
- Интерфейсная команда Linux
WeChat: «mqyqingfeng», добавьте меня в единственную читательскую аудиторию Xianyu.
Если есть какие-либо ошибки или неточности, пожалуйста, поправьте меня, большое спасибо. Если вам это нравится или у вас есть вдохновение, вы можете стать звездой, что также является поощрением для автора.