NGINX. Location — различия между версиями
Root (обсуждение | вклад) |
Root (обсуждение | вклад) |
||
Строка 26: | Строка 26: | ||
''# При совпадении дальнейший поиск не осуществляется''</font> | ''# При совпадении дальнейший поиск не осуществляется''</font> | ||
} | } | ||
+ | |||
<font color=red>Пример конфигурации №2. Базовый location</font> | <font color=red>Пример конфигурации №2. Базовый location</font> | ||
Строка 35: | Строка 36: | ||
''# то конфигурация для "/" не будет применена.''</font> | ''# то конфигурация для "/" не будет применена.''</font> | ||
} | } | ||
+ | |||
<font color=red>Пример конфигурации №3. Для URI вида «/data/.*»</font> | <font color=red>Пример конфигурации №3. Для URI вида «/data/.*»</font> | ||
Строка 44: | Строка 46: | ||
''# если более конкретизирующие расположения не удовлетворят искомому ресурсу.''</font> | ''# если более конкретизирующие расположения не удовлетворят искомому ресурсу.''</font> | ||
} | } | ||
+ | |||
<font color=red>Пример конфигурации №4. Для URI вида «/img/.*»</font> | <font color=red>Пример конфигурации №4. Для URI вида «/img/.*»</font> | ||
Строка 52: | Строка 55: | ||
''# префикс ^~ "крышечка/циркумфлекс тильда".''</font> | ''# префикс ^~ "крышечка/циркумфлекс тильда".''</font> | ||
} | } | ||
+ | |||
<font color=red>Пример конфигурации №5. Для графических форматов</font> | <font color=red>Пример конфигурации №5. Для графических форматов</font> | ||
Строка 62: | Строка 66: | ||
''# порядке в реальном конфиге, то до этого расположения ресурсов'' | ''# порядке в реальном конфиге, то до этого расположения ресурсов'' | ||
''# дойдут только те картинки, которые лежат вне расположения "/img/"''</font> | ''# дойдут только те картинки, которые лежат вне расположения "/img/"''</font> | ||
− | } | + | } |
+ | |||
<font color=red>Пример конфигурации №6. Именованный location</font> | <font color=red>Пример конфигурации №6. Именованный location</font> | ||
location / { | location / { | ||
error_page 404 = @fallback; | error_page 404 = @fallback; | ||
− | } | + | } |
− | location @fallback { | + | location @fallback { |
− | # Если при внутреннем перенаправлении не нужно менять URI, | + | <font color=grey>''# Если при внутреннем перенаправлении не нужно менять URI,'' |
− | # то можно передать обработку ошибки в именованный location | + | ''# то можно передать обработку ошибки в именованный location''</font> |
− | } | + | } |
− | Пример конфигурации №7. Выделение переменной | + | |
− | location ~ ^/a/(?[a-zA-Z]+) { | + | |
+ | <font color=red>Пример конфигурации №7. Выделение переменной</font> | ||
+ | location ~ ^/a/(?[a-zA-Z]+) { | ||
# Тут можно использовать переменную $myvar, | # Тут можно использовать переменную $myvar, | ||
# которая представляет из себя строку из латиницы | # которая представляет из себя строку из латиницы | ||
if ($myvar = "sth") { ... } | if ($myvar = "sth") { ... } | ||
− | } | + | } |
− | Примеры реальных nginx location’ов | + | |
+ | |||
+ | Примеры реальных nginx location’ов<br> | ||
Anti-hotlinking | Anti-hotlinking | ||
Директива location для Anti-hotlinking (борьбы с использованием ресурсов с вашего сервера на сторонних ресурсах. Такой способ использования ваших сетевых ресурсов называется hotlinking). Такое поведение хитрых разработчиков может заметно увеличить нагрузку на ваш сервер. Конфигурация: | Директива location для Anti-hotlinking (борьбы с использованием ресурсов с вашего сервера на сторонних ресурсах. Такой способ использования ваших сетевых ресурсов называется hotlinking). Такое поведение хитрых разработчиков может заметно увеличить нагрузку на ваш сервер. Конфигурация: |
Версия 11:29, 2 сентября 2021
Директива location служит для установки конфигурации в зависимости от URI-запроса. Синтаксис location в общем виде следующий:
Syntax: location [=|~|~*|^~] uri { ... } location @name { ... } Context: server, location
Location определяется в контексте server (или в location в случае вложенной директивы). В одном настраиваемом виртуальном хосте могут использоваться разные конфигурации в зависимости от обрабатываемого сервером URI.
Префикс «@» («собака») определяет именованные расположения. Такие location’ы не используются для обработки обычных запросов. Вместо этого они используются для перенаправления запросов (пример №6). Они не могут быть вложенными и содержать в себе вложенные.
Порядок обработки:
1. = Строковые совпадения. Если найдено, проверка заканчивается. = значит полное совпадение шаблона и проверяемой строки, например = / - заход в секцию будет исключительно для корня, и даже файлы в корне уже сюда не подходят.
2. ^~ Приоритетное строковое значение. Хотя правильнее было бы назвать «приоритетным регулярным выражением», поскольку в отличии от = требуется совпадение только начала. ^~ / полностью отключит регулярные выражения для секции server, если нет более точного location без ^~
3. Строковые значения (/download/). Ищется максимальное совпадение, смотрится только с начала пути. Если нужно совпадение вида /*/download/, то это уже будет п.4, так что в уме можно читать такую запись как /download/* Но на этом проверка не заканчивается!
4. ~, ~* Регулярные выражения, в порядке определения в конфиге. При совпадении - выполняется этот регэксп, проверка заканчивается. ~ — с учётом регистра, ~* — без.
5. Если не было найдено подходящей регулярки, используется наибольшее совпадение из п.3.
Примеры использования location
Пример конфигурации №1. Для корневого URI «/»
location = / { # Расположение только для URI / # При совпадении дальнейший поиск не осуществляется }
Пример конфигурации №2. Базовый location
location / { # Совпадает с URI всех запросов, т.к. они все начинаются с "/" # Но! Если будут найдены соответствия в расположениях # с регулярными выражениями или с другим более длинным # строковым литералом (например, "/data/"), # то конфигурация для "/" не будет применена. }
Пример конфигурации №3. Для URI вида «/data/.*»
location /data/ { # Это расположение соответствует всем URI, начинающихся с "/data/" # и продолжает поиск по оставшимся location'ам. # В этом примере регулярные выражения и другие строковые литералы # также будут проверены, и "location /data/" будет использован, # если более конкретизирующие расположения не удовлетворят искомому ресурсу. }
Пример конфигурации №4. Для URI вида «/img/.*»
location ^~ /img/ { # Соответствует любому URI, начинающемуся с "/img/". # Если соответствие установлено - останавливает дальнейший поиск, # не проверяя регулярные выражения, т.к. используется # префикс ^~ "крышечка/циркумфлекс тильда". }
Пример конфигурации №5. Для графических форматов
location ~* \.(png|ico|gif|jpg|jpeg)$ { # Данное расположение соответствует всем запрашиваемым URI, # оканчивающихся ".png", ".ico", ".gif", ".jpg" или ".jpeg". # При этом надо заметить, что запросы внутри расположения "/img/" # будут обработаны в location из примера №4 # Т.е., если расположения из примеров №4 и №5 разместить в таком же # порядке в реальном конфиге, то до этого расположения ресурсов # дойдут только те картинки, которые лежат вне расположения "/img/" }
Пример конфигурации №6. Именованный location
location / { error_page 404 = @fallback; }
location @fallback { # Если при внутреннем перенаправлении не нужно менять URI, # то можно передать обработку ошибки в именованный location }
Пример конфигурации №7. Выделение переменной
location ~ ^/a/(?[a-zA-Z]+) { # Тут можно использовать переменную $myvar, # которая представляет из себя строку из латиницы if ($myvar = "sth") { ... } }
Примеры реальных nginx location’ов
Anti-hotlinking
Директива location для Anti-hotlinking (борьбы с использованием ресурсов с вашего сервера на сторонних ресурсах. Такой способ использования ваших сетевых ресурсов называется hotlinking). Такое поведение хитрых разработчиков может заметно увеличить нагрузку на ваш сервер. Конфигурация:
location ~ \.(gif|png|jpe?g)$ {
valid_referers none blocked mywebsite.com *.mywebsite.com; if ($invalid_referer) { return 403; }
} Запрет на скрипты внутри директорий Следующий пример — запрет на скрипты в разрешённых для записи директориях:
location ~* /(images|cache|media|logs|tmp)/.*\.(php|pl|py|jsp|asp|sh|cgi)$ {
error_page 403 /403.htm; return 403;
} Включение autoindex В следующем примере location используется для включения autoindex в nginx (Разрешение на вывод листинга каталога):
location /list_dir {
autoindex on; autoindex_exact_size off; autoindex_localtime on;
}} Проксирование Nginx на другой IP server {
listen 80; server_name домен; access_log off; error_log off; location / {
# remote HTTP server
proxy_pass http://IP:Порт;
proxy_redirect http://IP:Порт /; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr;
proxy_connect_timeout 600; }
}