使用 nginx 阻止 HTTP 1.0

And*_*rew 6 nginx

我的服务器受到严重攻击。大多数请求都是这样来的:

46.43.84.214 - - [15/May/2012:11:21:45 +0400] "GET / HTTP/1.0" 200 65859 "2r4k68998q24ay.ru" "Mozilla/4.0 (compatible; MSIE 4.01; Vonna.com b o t)"
Run Code Online (Sandbox Code Playgroud)

所有此类请求的 HTTP 协议版本都相同。我可以以某种方式在 Web 服务器级别阻止 HTTP 1.0 请求吗?我试过这个来消除攻击(重定向到一个空文件):

if ($server_protocol ~* "HTTP/1.0") {
    rewrite ^/ http://example.com/white.txt;
}
Run Code Online (Sandbox Code Playgroud)

似乎没有多大帮助,我在日志中没有看到任何此类重定向。我使用 nginx 1.0.9 作为 Apache 2.2.3 的反向代理。

任何帮助表示赞赏。

Saš*_*ašo 9

你可以使用这样的东西

if ($http_user_agent ~* "Vonna.com" ) {
    return 444;
} 
Run Code Online (Sandbox Code Playgroud)

444 将关闭连接而不返回任何内容,确保尽可能低的影响。但是,如果您想通知可能的合法用户,请使用 400 之类的东西。

此外,可能会被推荐人阻止,尽管大多数机器人也很容易欺骗它。

就阻止整个 HTTP 1.0 而言,您应该先检查一下。如果您仍想将该块实现为临时解决方案,则应该可以使用类似的方法。

if ($server_protocol ~* "HTTP/1.0") {
    return 444;
} 
Run Code Online (Sandbox Code Playgroud)

基本上与您拥有的相同,除了没有重写 - 如果我没看错,您的使用使它只是停留在一个永久循环中。