Назад | Перейти на главную страницу

Как внести строку пользовательского агента в белый список?

Я пытаюсь внести в белый список очень конкретную строку пользовательского агента в 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; }

Видеть этот документ для большего.

Кстати, если вы в белом списке, то тест должен быть !~* или != отклонить несовпадающие строки.