Apacheの環境変数で設定されたアクセス制限をNginx用に書き換える

#

コンクリートファイブジャパン 岩本です。

 

今回リニューアルに伴って、WebサーバーがApacheからNginxへと変わったことで、htaccessが利用できなくなり、スパム対策ように記載してたアクセス制限の記述もNginx用に変換する必要がありました。

まず、以前のApache環境での記載は下記の様になっています。

SetEnvIfNoCase Referer hogehoge01.com spambot=yes
SetEnvIfNoCase Referer hogehoge02.com spambot=yes
SetEnvIfNoCase Referer hogehoge03.com spambot=yes
.....

Order Allow,Deny
Allow from All
Deny from env=spambot

リファラーが「hogehoge01.com 」であれば、環境変数 「spambot=yes」 となり、環境変数が「spambot」の物は、接続を許可しない。と記載されています。

では、この記載をNginxように変更すると、下記のようになります。

set $spambot 0;


if ( $http_referer ~* 'hogehoge01.com' ){
  set $spambot 1;
}
if ( $http_referer ~* 'hogehoge02.com' ){
  set $spambot 1;
}
if ( $http_referer ~* 'hogehoge03.com' ){
  set $spambot 1;
}
.....


if ( $spambot = 1) {
  return 403;
}

挙動は同じですが、記載方法が大きく異なります。

Nginxであれば、if文で記載できるようになり、より柔軟な処理を記載することができるようになります。


ただし、Nginxでは前記の通りhtaccessが利用できません。

Apache環境であれば、対象となる最上位のディレクトリ内に「.htaccess」ファイルを設置することで設定が可能でしたが、Nginxでは上記の設定をサーバーの設定ファイルへ追記する必要があります。

数行の設定であれば、いまあるNginxの設定ファイルに追記しても問題ありませんが、拒否したいリファラー数が数十行、数百行となった際に、既存の設定ファイルに追記すると視認性が悪くなり、メンテナンス性が下がります。

そこで、対象となる箇所のみを1ファイルにまとめ、Nginxの設定内にincludeすることで、設定ファイルを簡潔にできます。

server {
    listen               443 http2;
    ....
    #### deny spambot ######
    include      /etc/nginx/deny_spambot.conf;
}

上記の様にserverディテクティブいかにincludeすることで、設定の分離ができました。

同様に、他の設定でも、includeを利用することで設定の項目ごとに別ファイルとすることで、視認性、メンテナンス性を高めることができます。



コメント欄を読み込み中