【NGINX】サイトにある画像への直リンクを禁止する

負荷の原因が直リンクだったので対策したお話

サーバの負荷を調査するのってすごく面倒くさいのですが、原因がはっきりわかるとスッキリします。

逆に原因があやふやだと一日中もやもやして嫌な感じになるので、頑張って原因を調べるようにしています。

今回とあるサイトが重くて原因調査をしたところ、画像ファイルが直リンクされているようで負荷がかかっておりました。

わかっててやっているとしたらマナーが悪いですよね。

直リンク禁止って書いてもやる奴はやるので対策をします。

スポンサーリンク

invalid_referer

confに下記を記述します。
(test.hogeの場合)

location ~* /wp-content/uploads/.*(\.jpg|\.png|\.gif|\.jpeg|\.webp)$ {
    valid_referers server_names ~\.test\.hoge;
    if ($invalid_referer) { return 403; }
}

これでWordPressのアップロードしたファイルに直接アクセスすると403になります。

ただし、これだとGoogleさんも拒否してしまうので下記のようにします。

location ~* /wp-content/uploads/.*(\.jpg|\.png|\.gif|\.jpeg)$ {
    valid_referers server_names ~\.test\.hoge ~\.google\.;
    if ($invalid_referer) { return 403; }
}

SNSのブログカード等も影響でてしまうので適宜追加して対応という感じです。

ちなみに403じゃなくてダミー画像を表示させることも可能です。

if文を下記のようにします。

    if ($invalid_referer) { return 302 https://test.hoge/dummy.jpg; }

こうすることで直リンクをしているところはダミー画像が表示されて慌てるという寸法です。

直リンクやスクレイピングはやりすぎると負荷がかかってしまいます。

マナーを守って運用するようにしましょう。

コメント

タイトルとURLをコピーしました