Я пытаюсь внести в белый список очень конкретную строку пользовательского агента в Nginx. В приведенных ниже примерах показано, как внести в белый список общие типы браузеров (например, Mozilla или Chrome), но строка, которую я хочу добавить в белый список, /
и (
что нарушает конфигурацию nginx.
Как внести в белый список пользовательский агент для nginx?
https: //gist.github.com/supairish/2951524
https: //www.scalescale.com/tips/nginx/block-user-agents-nginx/
https: //www.cyberciti.biz/faq/nginx-if-conditional-http_user_agent-requests/
https://stackoverflow.com/questions/17674293/allow-only-one-user-agent-block-the-rest-in-nginx
Можно ли внести в белый список строку ниже?
if ($http_user_agent ~* (Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36) ) {
return 403;
}
Регулярное выражение содержит встроенные пробелы, поэтому его следует заключать в кавычки. Скобки и точки имеют особое значение в регулярных выражениях, и их следует экранировать с помощью обратной косой черты. Косая черта в порядке.
"\(Mozilla/5\.0 \(Windows NT 10\.0; Win64; x64\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Chrome/58\.0\.3029\.110 Safari/537\.36\)"
Если это вся строка для проверки, вы можете избежать использования экранированного регулярного выражения и использовать =
вместо строки в кавычках:
if ($http_user_agent = "..." ) { return 403; }
Видеть этот документ для большего.
Кстати, если вы в белом списке, то тест должен быть !~*
или !=
отклонить несовпадающие строки.