Эта статья переведена сWoohoo. Доступно на pc.com/support/thati…
задний план
Nginx location
Это навык, которым необходимо овладеть в процессе использования nginx, будь то вserver blocks
или что-то другоеlocation blocks
будет использоваться в этой статье, эта статья кратко представляет, когда приходит запросlocation
Как директивы обрабатываются клиентомURI
просил.
Блочная конфигурация Nginx
Nginx настраивает конфигурацию в виде иерархических отношений в блочной форме. Всякий раз, когда приходит запрос, сервер nginx обрабатывает конфигурацию блока, с которой будет сопоставлен запрос. В файле конфигурации Nginx есть две основные конфигурации блоков:
-
server
конфигурация блока -
location
конфигурация блокаserver
Конфигурация блока содержит ряд конфигураций виртуальных серверов, а конфигурации нескольких серверов могут обрабатывать запросы для нескольких доменных имен, включая порты ip. иlocation
настроен вserver
конфигурация блока играет решающую роль в определенииURI
Или как должны обрабатываться запросы ресурсов, эти запросы URI могут быть разделены на несколькоlocation
Конфигурация
Синтаксис директивы местоположения Nginx
Ниже приведен синтаксический формат часто используемой конфигурации местоположения, гдеmodifier
не является обязательным,location_match
Это ключ к указанию, к какой конфигурации должен перейти URI.
location optional_modifier location_match {
. . .
}
Regular expressions(RE)или литералы могут использоваться для определенияmodifier
, если в конфигурации локации указан модификатор, он может изменить способ сопоставления nginx с локацией Ниже описаны наиболее важные модификаторы:
- (none)Отсутствие модификатора вообще означает, что локация будет интерпретироваться как совпадение префикса, а для определения совпадения локация будет сопоставляться с начала URI.
-
=
Знак равенства означает, что текущая локация будет соответствовать определенному запросу, а конфигурация будет соответствовать любому запросу, при совпадении поиск будет остановлен. -
~
Знак тильды указывает, что текущее местоположение будет соответствовать RE с учетом регистра. -
~*
Тильда и звездочка для обозначения местоположения будут сопоставляться с нечувствительным к регистру RE. -
^~
Если выражение (RE) не совпадает, регулярное выражение не вступит в силу.
Порядок соответствия Nginx Location
Для каждого запроса nginx выберет наиболее подходящее место для обработки запроса. Фактически, nginx выбирает расположение, сравнивая эти правила расположения. Порядок сравнения можно резюмировать следующим образом:
- Совпадения префикса (без выражений RE) сопоставляются первыми, и каждое совпадение префикса сопоставляется один раз для текущего запроса.
- поиск
=
Совпадение, если текущий запрос совпадает, поиск остановится и будет использоваться это местоположение напрямую. - Если на втором этапе совпадений нет, nginx продолжит поиск самого длинного совпадения префикса следующим образом:
3.1 Если самое длинное совпадение префикса
^~
С этим модификатором nginx прекратит поиск и будет использовать это местоположение напрямую. 3.2 Еслинетиспользовать^~
, временно сохраните это местоположение и продолжите поиск. - Пока установлено и выбрано самое длинное совпадение префикса, nginx будет проверять, есть ли в текущем местоположении RE с учетом регистра (
~
и~*
), первое совпадение будет рассматриваться как допустимое местоположение для обработки запроса. - Если ни одно местоположение RE не совпадает, для обработки запроса будет выбрано ранее подготовленное местоположение.
Примечание. Таким образом, расположение без модификатора на самом деле является пустой тратой ресурсов, вместо этого вы можете использовать ^~.
Пример
Ниже приведены некоторые примеры конфигурации местоположения, которые используются для подробного описания упомянутой выше последовательности обработки.Вы также можете изменить эти примеры в соответствии с реальной ситуацией.
location = / {
# 只处理请求 /.
}
location /data/ {
# 所有以 /data/ 匹配,但是还会继续搜索.
# 如果没有其他 location 匹配上,就用这个处理请求.
}
location ^~ /img/ {
# 所有以 /img/ 开头的请求并且会停止搜索.
}
location ~* .(png|gif|ico|jpg|jpeg)$ {
# 以png, gif, ico, jpg ,jpeg结尾的请求.
# 如果请求是到 /img/ 路径的话 还是会被上面👆的 location 处理
}
Как предотвратить фотографиигорячая ссылка:
location ~ .(png|gif|jpe?g)$ {
valid_referers none blocked yourwebsite.io *.yourwebsite.io;
if ($invalid_referer) {
return 403;
}
}
Запретить скрипты в доступных для записи каталогах:
location ~* /(media|images|cache|tmp|logs)/.*.(php|jsp|pl|py|asp|cgi|sh)$ {
return 403;
}
Для получения дополнительной информации о директиве местоположения nginx, пожалуйста, обратитесь к официальному веб-сайту:Nginx