WordPress の管理画面 ( /wordpress/wp-admin ) へのアクセスを制限するにあたり、固定 IP アドレスである自宅回線はともかく、外部からの利用に関してどうするのかを調べた。結果的には固定 IP アドレスからのアクセスは無条件で許可し、それ以外の場合は .htpasswd を使用する basic 認証を利用すれば良いとのこと。
仮にドキュメントルート上 (ここでは /var/www/html/ ) に .htpasswd を作成したとして WordPress 管理画面を制限するなら、nginx.conf での記述は以下のようになる。
location /wordpress/wp-admin/ { satisfy any; allow xxx.xxx.xxx.xxx; ← 許可する固定 IP アドレス deny all; ← 上記以外の無条件アクセスは許可しないけど…… auth_basic "Login"; ← 適当 auth_basic_user_file /var/www/html/.htpasswd; }
というわけで、上記のように設定すれば想定通り動いた。意外に簡単だとは思ったのだけど、いろいろと追加で調べていたら nginx でのアクセス制限においては IP アドレス表記と CIDR 表記を使うことしかできないようで。ドメインを利用したアクセス制限ができないというのは知らなかった。まぁドメインを利用したアクセス制限というのは気休めレベルなので、固定 IP アドレスがない場合は basic 認証を使えということなのでしょう。
ちなみになのだけど、ngnix.conf に関していろいろ調べていて今回の件。.htpasswd の表記を htpasswd( “.” がない)としているサイトがあったのだけど大丈夫なのだろうか。そういう記事を読んで “.” なしでそんなファイル作る方がいたら大変だ。バレたら簡単にダウンロードされてしまうのだが。
そんな感じですが、やりたいことができたので満足。もしかすると通常は basic 認証部分をコメントアウトしておいて、外部から利用するときだけ ssh でターミナルからその部分解除して利用するとかやればいいかなとも思ったけど、面倒だからきっとしない。まぁ外部から触るときは何かしらのメンテナンスだろうから、コメントアウトするしないはあまり手間でもないけど。