Поскольку команда разделяет интерфейс и серверную часть, интерфейсная часть берет на себя уровни Nginx и узла.В повседневной работе приходится много иметь дело с Nginx. Где местоположение является наиболее часто используемым и изменяемым местом. Ранее правила сопоставления для местоположения были поняты наполовину. Чтобы понять, как сопоставляется местоположение, я намеренно потратил некоторое время на проверку некоторой информации и подведение итогов этой статьи. Надеюсь, это может помочь всем.
грамматические правила
location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
Правила грамматики просты,location
Ключевое слово, за которым следуют необязательные модификаторы, за которыми следуют символы для сопоставления, а в фигурных скобках указывается действие, которое необходимо выполнить.
модификатор
-
=
Указывает на точное совпадение. Он сработает только в том случае, если запрошенный URL-адрес точно равен следующей строке. -
~
Указывает, что правило определено с использованием регулярных выражений и учитывает регистр. -
~*
Указывает, что правило определено с использованием регулярных выражений и не чувствительно к регистру. -
^~
Указывает, что если символ, следующий за символом, является наиболее подходящим, то правило принимается, и последующие поиски не выполняются.
процесс сопоставления
Сериализировать запрошенный URL. Например, правильно%xx
Подождите, пока символы будут декодированы, и удалите несколько связанных символов в URL-адресе./
, разбор URL в.
,..
Ждать. Этот этап является предматчевой работой.
Существует два представления местоположения: одно с использованием префиксных символов, а другое с использованием регулярных выражений. Если это регулярно, то есть~
или~*
модификатор.
Конкретный процесс сопоставления выглядит следующим образом:
Сначала проверьте местоположение, определенное символом префикса, выберите самое длинное совпадение и запишите его.
Если точное совпадение найдено, оно используется=
Расположение модификатора, которым завершается поиск, использует его конфигурацию.
Затем найдите местоположение, определенное регуляркой, по порядку, если оно совпадает, остановите поиск и используйте определенную им конфигурацию.
Если нет подходящего обычного местоположения, используется самое длинное совпадающее местоположение символа префикса, записанное ранее.
Основываясь на приведенном выше процессе сопоставления, мы можем получить следующие два вдохновения:
- Порядок, в котором местоположения, определенные с помощью регулярного выражения, отображаются в файле конфигурации, важен.. Потому что после нахождения первого подходящего регуляра поиск останавливается, и регулярка, определенная позже, уже не имеет шансов снова совпасть.
-
Используйте точное совпадение, чтобы ускорить поиск. Например, часто просить
/
Вы можете использовать=
для определения местоположения.
Пример
Далее мы используем пример, чтобы подробно проиллюстрировать процесс сопоставления.
Предположим, у нас есть следующий файл конфигурации:
location = / {
[ configuration A ]
}
location / {
[ configuration B ]
}
location /user/ {
[ configuration C ]
}
location ^~ /images/ {
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
[ configuration E ]
}
просить/
Точно соответствует А, больше не смотрите вниз.
просить/index.html
соответствует Б. Сначала найдите соответствующий символ префикса, найдите самое длинное совпадение в конфигурации B, а затем найдите совпадающую регулярность по порядку. Результат не найден, поэтому используется самое длинное совпадение, отмеченное ранее, т. е. конфигурация B.
просить/user/index.html
соответствует С. Сначала найдите самое длинное совпадение C, потому что нет подходящего регулярного совпадения, поэтому используйте самое длинное совпадение C.
просить/user/1.jpg
соответствует Э. Сначала выполните поиск символов префикса, чтобы найти самый длинный соответствующий элемент C, и продолжайте выполнять обычный поиск, чтобы найти соответствующий элемент E. Так что используйте Э.
просить/images/1.jpg
соответствовать Д. Сначала выполняется поиск символов префикса, чтобы найти самое длинное совпадение D. Однако, что особенного, так это то, что он использует^~
модификатором, дальнейший обычный поиск соответствия не выполняется, поэтому используется D. Здесь, если нет предшествующего модификатора, окончательным соответствием является фактически E. Вы можете подумать, почему.
просить/documents/about.html
соответствует Б. потому что B означает любой/
URL-адреса, начинающиеся с совпадения all. В приведенной выше конфигурации только B может удовлетворить, поэтому сопоставьте B.
Использование местоположения @имя
@ используется для определения именованного местоположения. В основном используется для внутреннего перенаправления и не может использоваться для обработки обычных запросов. Его использование заключается в следующем:
location / {
try_files $uri $uri/ @custom
}
location @custom {
# ...do something
}
В приведенном выше примере, когда вы пытаетесь получить доступ к URL-адресу и не можете найти соответствующий файл, он перенаправляется в наше пользовательское именованное местоположение (здесь это пользовательское).
Стоит отметить, что другие именованные местоположения не могут быть вложены в именованное местоположение.
в конце URL-адреса/
нужно или нет
о конце URL/
Следует отметить три момента. Первый пункт связан с конфигурацией локации, остальные два к ней отношения не имеют.
-
Есть ли персонажи в локации
/
не имеют никакого эффекта. то есть/user/
а также/user
это то же самое. -
Если структура URL
https://domain.com/
форма, с хвостом или без/
не вызовет перенаправления. Потому что когда браузер инициирует запрос, он добавляется по умолчанию./
. Хотя многие браузеры не будут отображать его в адресной строке./
. Это может быть доступноbaiduПроверьте это. -
Если структура URL
https://domain.com/some-dir/
. хвост, если отсутствует/
вызовет перенаправление. Поскольку по соглашению конец URL/
указывает каталог, нет/
Представляет файл. так посетите/some-dir/
, сервер автоматически перейдет в каталог, чтобы найти соответствующий файл по умолчанию. если посетить/some-dir
Если это так, сервер сначала будет искать его.some-dir
файл, если он не найден, он будетsome-dir
В качестве каталога перенаправить на/some-dir/
, перейдите в каталог, чтобы найти файл по умолчанию. Может пойти, чтобы проверить свой сайт не так.
Суммировать
Конфигурация местоположения имеет две формы: префиксно-символьную и обычную. При поиске совпадения сначала найдите символ префикса, выберите самое длинное совпадение, а затем найдите обычное. Обычные символы имеют приоритет над префиксными символами.
Регулярные поиски выполняются в соответствии с порядком в файле конфигурации. Поэтому порядок регуляризации очень важен.
использовать=
Точное совпадение может ускорить порядок поиска, рекомендуется использовать, если имя корневого домена часто используется и т. д.=
.