在过去的几个小时里,我的服务器负载非常大,主要是因为有大量的加载请求。我从 StatCounter 实时统计数据中看到了这一点,它显示“来源”页面是:
http://www.facebook.com/extern/login_status.php?api_key=3d34061e0ac6dc4dec21b35d2fb9d6d3&extern=0&channel=http%3A%2F%2Fwww.mysite.com%2F%3Fxd_receiver%3D1&locale=es_ES&sdk=edgar
登陆页面是
http://www.mysite.com/?xd_receiver=1#%7B%22id%22%3A0%2C%22sc%22%3A%22http%3A%2F%2Fwww.facebook.com%2Fxd_receiver_v0.4.php%22%2C%22sf%22%3A%22loginStatus%22%2C%22sr%22%3A2%2C%22h%22%3A%22loginServer%22%2C%22sid%22%3A%220.162%22%2C%22t%22%3A0%7D%5B0%2C%22loginStatus%22%2C%22InitLogin%22%2C%7B%22b
CPU、内存和带宽越来越高,我想知道这是否可能是某种攻击。
这是使用 WP 3.2.1 的 WordPress 博客,基于 Ubuntu 10.04.2 LTS,配有 Nginx、PHP-FPM 和 APC。通常运行良好,但我担心这些请求会给服务器带来过多的负载。
我唯一的解释是,我已经获得了简单的 Facebook Connect 插件,允许使用 Facebook 帐户发表评论,但到目前为止还没有出现任何问题。
奇怪的是,access.log 显示请求来自不同的 IP,所以我猜测这不是一次攻击
164.77.106.237 - - [19/Oct/2011:18:20:53 +0200] "GET /?xd_receiver=1 HTTP/1.1" 403 189 "http://www.facebook.com/extern/login_status.php?api_key=3d34061e0ac6dc4dec21b35d2fb9d6d3&extern=0&channel=http%3A%2F%2Fwww.mysite.com%2F%3Fxd_receiver%3D1&locale=es_ES&sdk=edgar" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.1)"
212.104.164.139 - - [19/Oct/2011:18:20:48 +0200] "GET /?xd_receiver=1 HTTP/1.1" 403 135 "http://www.facebook.com/extern/login_status.php?api_key=3d34061e0ac6dc4dec21b35d2fb9d6d3&extern=0&channel=http%3A%2F%2Fwww.mysite.com%2F%3Fxd_receiver%3D1&locale=es_ES&sdk=edgar" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 Safari/535.1"
etc.
在 Nginx 中是否有可能阻止例如与所有这些请求中的常量 api_key 参数匹配的 URL?
答案1
是的,你可以使用正则表达式阻止 NGINX 中的 URL,如下所示:
location / {
if ($uri ~* '^/(abc|def|ghi)$') {
allow 1.2.3.4;
deny all;
}
root /var/www/
...
}
您还可以阻止一些引荐来源:
if ($http_referer ~* (klm|nop|qrs)) {
return 403;
}
或用户代理:
if ($http_user_agent ~ (libwww-perl|wget) ) {
return 403;
}