nginxで直リンクを防止する方法
サーバー運営者にとって、直リンクって迷惑ですよね。nginxでそんな直リンクを防止する方法を紹介します。
直リンクは直リンとか呼ばれ、外部のサイトから直接自分のサーバーにある画像などのリソースが呼び出される状態になっていることで、自分のサイトではないのに勝手にサーバーにアクセスされて、CPUやメモリーなどのリソースや帯域幅を消耗します。
これを大手のサイトにやられると、膨大なアクセスが来てリソースを大きく消耗します。AWSとかでサーバーを運営している場合、結構なデータ量が自分とは関係のないサイトのために課金されることになり、なかなか痛いものがあります。
そんな状況を改善するために直リンク対策をサーバー側で行います。私はnginxで運営していますので、nginxのコンフィグ例を示しますが、Apacheでも同様の設定は可能かと思います。
server {
# ...
#画像直リンク禁止措置
location ~.*\.(gif|jpe?g|png)$ {
valid_referers none blocked server_names kosukety.org;
if ($invalid_referer) {
rewrite ^(.*)$ http://i0.wp.com/media.kosukety.org/wp-content/uploads/2015/07/ProtectionHotlinkingWarning.png?w=600;
return 403;
}
}
# ...
}
「kosukety.org」のところは自分のウェブサイトのドメインに置き換えてください。あと、8行目は直リンク画像を警告用画像に置き換える措置なので、もし必要がなければいりません。
警告用の画像は、
こんな感じ。
Google Adsenseなどのアフィリエイトを運営しているサイト向けに、そういったアフィリエイトのガイドラインの違反になるような画像をはっつけてやる方法もあるかもしれませんが、そこまではね。
ちなみに警告画像が自サーバーから出ると節約効果がないので、CDNのリンクを指定しています。まあ、そのまま何もせずに403を返すのが一番すっきりしているかもしれませんね。