nginx内使用正则表达式(花括号)需要注意的问题
2010年05月24日 星期一 13:42
朋友为对付一些乱七八糟网站的盗链,于是就在nginx配置文件内写了一个正则来禁止那些域名,他写的是这个样子:
if ($http_referer ~* .*([0-9]{2,3}[a-z]{3}\.com|ffkkk\.net|444nnn\.net)) {
return 403;
}
但是用nginx -t来测试nginx配置文件语法的时候报错,提示在[0-9]这里有错。我看了看,正则写的没有问题呀,怀疑是[]的问题,我自己以前没有在ngnix内用过[],就简化了下:
if ($http_referer ~* .*[0-9]\.com) {
return 403;
}
用上面这个配置语法测试通过了。说明[]是可以直接用的,这样试过之后我恍然大悟,确定是{}的问题,因为nginx内{}是用来表示配置段的,直接用肯定有问题。但是在nginx的配置文件内,难道正则就不能用{}了吗?
肯定是可以的,要不然也太弱智了,经过google,终于找到
答案:原来如果正则内有用{}的话,只要在正则的两边加上单引号或双引号就行了。
所以写成这样子就通过了:
if ($http_referer ~* "^.*[0-9]{2,3}[a-z]{3}\.com") {
return 403;
}
阅读(1148) | 评论(0) | 转发(0) |