valid_referers解決策は機能しますが、個人的には、そのように長いブラックリストを維持するのは困難です. ngx_http_map_module別の解決策は、モジュールを使用することです。ubuntu 14.04 nginx ディストリビューションでは、/etc/nginx/blacklist.conf ファイルを作成します。
# /etc/nginx/blacklist.conf
map $http_referer $bad_referer {
hostnames;
default 0;
# Put regexes for undesired referers here
"~social-buttons.com" 1;
"~semalt.com" 1;
"~kambasoft.com" 1;
"~savetubevideo.com" 1;
"~descargar-musica-gratis.net" 1;
"~7makemoneyonline.com" 1;
"~baixar-musicas-gratis.com" 1;
"~iloveitaly.com" 1;
"~ilovevitaly.ru" 1;
"~fbdownloader.com" 1;
"~econom.co" 1;
"~buttons-for-website.com" 1;
"~buttons-for-your-website.com" 1;
"~srecorder.co" 1;
"~darodar.com" 1;
"~priceg.com" 1;
"~blackhatworth.com" 1;
"~adviceforum.info" 1;
"~hulfingtonpost.com" 1;
"~best-seo-solution.com" 1;
"~googlsucks.com" 1;
"~theguardlan.com" 1;
"~i-x.wiki" 1;
"~buy-cheap-online.info" 1;
"~Get-Free-Traffic-Now.com" 1;
}
次に、それを /etc/nginx/nginx.conf ファイルに含めます。
# /etc/nginx/nginx.conf
http {
# ...
include blacklist.conf;
# ...
}
$bad_refererこれが完了したら、nginx サイトで状態を確認できます。
# /etc/nginx/sites-enabled/mysite.conf
server {
# ...
if ($bad_referer) {
return 444;
}
# ...
}
そして、これが機能することを確認するには、シェルで同様のコマンドを実行できます。
$ curl --referer http://www.social-buttons.com https://example.org
...あなたに与えるはずです:
curl: (52) Empty reply from server
このソリューションに関するブログ記事をhttps://fadeit.dk/blog/2015/04/22/nginx-referer-spam-blacklist/に書きました。