2015-10-06 41 views
2

否认我写了两个不同的设置,一个是拒绝访问点文件,另一个用于拒绝对文件扩展名列表的访问。nginx的位置按文件扩展语法

但是,有可能否认其他的文件扩展名列表点文件的任何语法?

location ~* \.(7z|bak|bash|bz2|config|dist|engine|fla|git|gz|inc|inc|info|ini|install|iso|log|make|module|profile|psd|py|rar|rb|sh|sql|swp|tar|zip)$ { 
deny all; 
} 

location ~ /\. { deny all; access_log off; log_not_found off; } 
+0

请提供“点文件”的一个例子 –

+0

点文件作为以点开始任何文件,任何配置或RC文件通常发现在基于Unix系统,如htaccess的,.bashrc中,.zshrc – Dogbert

回答

1

nginx服务器usespcre为正则表达式库;无论pcre接受,nginx也应如此。

在OpenBSD一些测试与egrep(1)显示:

$ printf '/t.bak\n/t.bakk\n/t.zipp\n/a.zip\n/.ht\n/t.ht\n' |grep -E '\.(bak|zip)$|/\.' /t.bak /a.zip /.ht $

OpenBSD's egrep实际上并未使用PCRE,但regcomp(3)而不是!然而,PCRE不来与pcregrep,它不产生相同的结果:

$ printf '/t.bak\n/t.bakk\n/t.zipp\n/a.zip\n/.ht\n/t.ht\n' |pcregrep '\.(bak|zip)$|/\.' /t.bak /a.zip /.ht $

您也可以尝试pcretest用于测试正则表达式(显然,你必须像#引用它们):

$ pcretest 
PCRE version 8.30 2012-02-04 

    re> #\.(bak|zip)$|/\.# 
data> /t.bak 
0: .bak 
1: bak 
data> /t.baki 
No match 
data> /.h 
0: /. 
data> ^D 
$

即,总结:只是连接两个表达式与|应该工作

location ~* \.(bak|zip)$|/\. { 
    deny all; 
} 

然而,对于维修的缘故(因为你已经不得不问这个问题摆在首位),你可能也想除了保留这些表达式为更清楚地了解配置的全部内容。 (两个表达式除了甚至可能是更有效的,由于某种最终的在线优化时合并到一起比,但是这只是我的一个胡乱猜测。)