Одна статья, чтобы понять сопоставление местоположения Nginx

Nginx

Поскольку команда разделяет интерфейс и серверную часть, интерфейсная часть берет на себя уровни Nginx и узла.В повседневной работе приходится много иметь дело с Nginx. Где местоположение является наиболее часто используемым и изменяемым местом. Ранее правила сопоставления для местоположения были поняты наполовину. Чтобы понять, как сопоставляется местоположение, я намеренно потратил некоторое время на проверку некоторой информации и подведение итогов этой статьи. Надеюсь, это может помочь всем.

грамматические правила

location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }

Правила грамматики просты,locationКлючевое слово, за которым следуют необязательные модификаторы, за которыми следуют символы для сопоставления, а в фигурных скобках указывается действие, которое необходимо выполнить.

модификатор

  • =Указывает на точное совпадение. Он сработает только в том случае, если запрошенный URL-адрес точно равен следующей строке.
  • ~Указывает, что правило определено с использованием регулярных выражений и учитывает регистр.
  • ~*Указывает, что правило определено с использованием регулярных выражений и не чувствительно к регистру.
  • ^~Указывает, что если символ, следующий за символом, является наиболее подходящим, то правило принимается, и последующие поиски не выполняются.

процесс сопоставления

Сериализировать запрошенный URL. Например, правильно%xxПодождите, пока символы будут декодированы, и удалите несколько связанных символов в URL-адресе./, разбор URL в.,..Ждать. Этот этап является предматчевой работой.

Существует два представления местоположения: одно с использованием префиксных символов, а другое с использованием регулярных выражений. Если это регулярно, то есть~или~*модификатор.

Конкретный процесс сопоставления выглядит следующим образом:

Сначала проверьте местоположение, определенное символом префикса, выберите самое длинное совпадение и запишите его.

Если точное совпадение найдено, оно используется=Расположение модификатора, которым завершается поиск, использует его конфигурацию.

Затем найдите местоположение, определенное регуляркой, по порядку, если оно совпадает, остановите поиск и используйте определенную им конфигурацию.

Если нет подходящего обычного местоположения, используется самое длинное совпадающее местоположение символа префикса, записанное ранее.

Основываясь на приведенном выше процессе сопоставления, мы можем получить следующие два вдохновения:

  1. Порядок, в котором местоположения, определенные с помощью регулярного выражения, отображаются в файле конфигурации, важен.. Потому что после нахождения первого подходящего регуляра поиск останавливается, и регулярка, определенная позже, уже не имеет шансов снова совпасть.
  2. Используйте точное совпадение, чтобы ускорить поиск. Например, часто просить/Вы можете использовать=для определения местоположения.

Пример

Далее мы используем пример, чтобы подробно проиллюстрировать процесс сопоставления.

Предположим, у нас есть следующий файл конфигурации:

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/Следует отметить три момента. Первый пункт связан с конфигурацией локации, остальные два к ней отношения не имеют.

  1. Есть ли персонажи в локации/не имеют никакого эффекта. то есть/user/а также/userэто то же самое.

  2. Если структура URLhttps://domain.com/форма, с хвостом или без/не вызовет перенаправления. Потому что когда браузер инициирует запрос, он добавляется по умолчанию./. Хотя многие браузеры не будут отображать его в адресной строке./. Это может быть доступноbaiduПроверьте это.

  3. Если структура URLhttps://domain.com/some-dir/. хвост, если отсутствует/вызовет перенаправление. Поскольку по соглашению конец URL/указывает каталог, нет/Представляет файл. так посетите/some-dir/, сервер автоматически перейдет в каталог, чтобы найти соответствующий файл по умолчанию. если посетить/some-dirЕсли это так, сервер сначала будет искать его.some-dirфайл, если он не найден, он будетsome-dirВ качестве каталога перенаправить на/some-dir/, перейдите в каталог, чтобы найти файл по умолчанию. Может пойти, чтобы проверить свой сайт не так.

Суммировать

Конфигурация местоположения имеет две формы: префиксно-символьную и обычную. При поиске совпадения сначала найдите символ префикса, выберите самое длинное совпадение, а затем найдите обычное. Обычные символы имеют приоритет над префиксными символами.

Регулярные поиски выполняются в соответствии с порядком в файле конфигурации. Поэтому порядок регуляризации очень важен.

использовать=Точное совпадение может ускорить порядок поиска, рекомендуется использовать, если имя корневого домена часто используется и т. д.=.

Категории