如何白名单用户代理string?

我试图在Nginx中列出一个非常特定的用户代理string。 下面的例子演示了如何将一般types的浏览器列入白名单(例如mozilla或chrome),但是我想列入白名单的string是/(这打破了nginx的conf。

如何将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

是否可以将下面的string列入白名单?

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

正则expression式包含embedded的空格,因此应该引用。 括号和句点在正则expression式中有特殊含义,应该使用反斜线进行转义。 正斜线很好。

 "\(Mozilla/5\.0 \(Windows NT 10\.0; Win64; x64\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Chrome/58\.0\.3029\.110 Safari/537\.36\)" 

如果这是要testing的整个string,则可以避免转义的正则expression式,而是使用带引号的string=来代替:

 if ($http_user_agent = "..." ) { return 403; } 

请参阅此文档了解更多

顺便说一句,如果你是白名单,testing应该是!~*!=来拒绝不匹配的string。