メモ/nginxで直リン禁止設定。valid_refererでリファラを検証。

memo_top

こんにちは、えんぞーです。

画像でもファイルでもなんでも良いですが、直接リンクをされるのが嫌な場合に自分のサイトからの呼び出しでない場合はアクセスを禁止する・・とか良く聞くと思いますが、今回はそれを nginx で・・・と言うメモ。

とは言っても、このサイトでそれをしているわけでは無いですけども。

Nginx の設定

使用する設定はこちらの「valid_referer」です。

設定ファイルは/etc/nginx/nginx.conf とか、環境によるので自分のサーバーのファイルを確認して下さい。

1valid_referers server_names hogehoge.net;
2if ($invalid_referer) {
3  return 403;
4}

基本的にこれで OK。

server_name に自サイトのドメインを指定してあげてリファラにそのドメイン入って無かったら 403 を返す。

ここを rewrite で書き換えると任意の場所に飛ばせます。

良く聞くのは直リン禁止の画像に飛んだり・・とか。

ロケーションを画像ファイルへのみに設定するのであれば

1location ~ .*.(gif|jpe?g|png|avi|flv|mov) {
2  valid_referers server_names hogehoge.com;
3  if ($invalid_referer){
4   #rewriteする場合は↓をコメントアウト外して使用(Topページに飛ばします)
5   #rewrite ^(.*)$ /;
6   return 403;
7  }
8}

こんな感じで行けるはず。

  追記:Wordpress 等での注意点

ちょっと限定的な話しになりますけど、例えば Wordpress で【Auto Post Thumbnail】を使っている場合にサムネイルが作られなくなります。

これはプラグイン側で画像を持ってこようとした場合にリファラが無いので画像を持ってくる事が出来ない為です。

これを回避するためにプラグイン側に修正を加える必要が出てきます。

「Auto Post Thumbnail」の例で言うと、

1function curl_get_file_contents($URL) {
2    $c = curl_init();
3    curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
4    curl_setopt($c, CURLOPT_URL, $URL);
5    curl_setopt($c, CURLOPT_REFERER, "http://hogehoge.com");

このように CRUL のオプションを足す必要が出てきます。

上記の場合はこの関数を使う部分に分岐があり、そこを排除して強制的にこの関数を使うようにする必要も出てきます。

このように他のプラグイン等にも影響が出る場合があるので注意して下さい。

とりとめのないまとめ

単純に直リンク防止であれば上記の方法だけで出来るので簡単ですね。(注意点もありますけど・・・)

nginx自体は色々と奥が深いのでメモれる部分はメモっていきたいと思います。