Nginx配置过滤未正确过滤.exe,.txt等

时间:2017-06-19 19:43:46

标签: ruby-on-rails regex nginx

我有一个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.exedeny 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。第二双眼睛会很棒。谢谢。

1 个答案:

答案 0 :(得分:0)

  1. .txt的位置标记不明确:它出现在第一个和第三个块中。
    请注意:与请求URI匹配的第一个正则表达式位置会立即被选中以提供请求,因此http://oh-web02.dc1.lan/llznl93573.txt块永远不会提供deny all

  2. 当您最初尝试检查查询字符串时,您的第二个网址(http://oh-web02.dc1.lan//download_notice.html? filename=FileZilla_Server-0_9_31.exe)以.html结尾,请参阅this post on serverfault解决方法。