Nginx. Проверьте, какое местоположение используется для обработки запроса
Мне интересно, как узнать, было ли определенное место [s] использовано для обработки запроса в nginx
.
например:.
# 1
location / {}
# 2
location ~ /[\w\-]+\.html {}
# 3
location ~ /\w+\.html {}
Как узнать, обрабатывается ли URI, например /mysite
, третьим местом, а не вторым?
Я обычно использую add_header
:
location / {
add_header location 1;
}
location ~ /(\w+\-)\.html {
add_header location 2;
}
location @named {
add_header location named;
}
И я хотел бы знать, есть ли лучшее решение или что вы лично используете для отладки?
Ответы
Ответ 1
Трюк add_header - это то, как я это сделаю.
Я сейчас работаю, поэтому я не могу проверить, но вы можете что-то получить в файле журнала, для которого вы установили уровень error_log
:
-
debug
: вам нужно построить nginx с помощью --with-debug
, чтобы это работало, вы можете проверить это с помощью команды nginx -V
-
notice
: если ведение журнала отладки не включено
Ответ 2
Если вы просто хотите увидеть, какой блок был использован, и не заботятся о возврате других действительных результатов, может быть более прямолинейным использование return
, а не add_header
.
location / {
return 200 'location 1';
}
location ~ /(\w+\-)\.html {
return 200 'location 2';
}
location @named {
return 200 'location named';
}
Ответ 3
Слово предупреждения об этом подходе. Мне было плохо использовать location
в качестве заголовка отладки, поскольку location
- это реальный заголовок, используемый HTTP-ответом 301.
Итак, если (как я) в вашем тестировании, вы получите следующее:
HTTP/1.1 301 Moved Permanently
...
Location: http://mydomain.com/banana/
location: banana
Затем ваш браузер будет волноваться и сообщить Duplicate headers received from server
. Поэтому используйте locationdebug
или что-то безопасное.