我有一个nginx配置文件,其配置如下:
server {
listen 80;
server_name www.stage.app.net;
root /var/local/app/current/public;
location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|ttf|woff|svg)$
{
#oboe_tracing_mode never;
expires 1y;
}
location ~* /trackback {
deny all;
}
location ~* \.(php|exe|src|txt)$ {
deny all;
}
passenger_enabled on;
passenger_friendly_error_pages on;
rails_env staging;
}
现在我要实现的是trackback
和.exe
等deny all;
。这种配置似乎只是过滤掉一些网址而允许其他网址。例如,以下是我尝试过滤的一些网址
http://oh-web02.dc1.lan//download_notice.html?
filename=FileZilla_Server-0_9_31.exe
http://oh-web02.dc1.lan/llznl93573.txt
http://oh-web02.dc1.lan/p/firefox/index.php
http://oh-web02.dc1.lan/p/firefox/commits/index.exe
前两个网址根本没有过滤掉,但最后两个网址没有过滤掉。我已经检查了Rubular我的正则表达式,我应该正确地过滤它,但由于某种原因,它不是。我有location
指令有什么不对吗?它应该找到具有指定扩展名的URL。第二双眼睛会很棒。谢谢。
答案 0 :(得分:0)
.txt
的位置标记不明确:它出现在第一个和第三个块中。
请注意:与请求URI匹配的第一个正则表达式位置会立即被选中以提供请求,因此http://oh-web02.dc1.lan/llznl93573.txt
块永远不会提供deny all
。
当您最初尝试检查查询字符串时,您的第二个网址(http://oh-web02.dc1.lan//download_notice.html?
filename=FileZilla_Server-0_9_31.exe
)以.html
结尾,请参阅this post on serverfault解决方法。