我试图在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。