Подтвердить что ты не робот

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;
}

И я хотел бы знать, есть ли лучшее решение или что вы лично используете для отладки?

4b9b3361

Ответ 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 или что-то безопасное.