WordPressでWebサイトを運営している場合、WordPressの管理ページにはしっかりとアクセス制限を施して、悪意のある第三者にアクセスされるのを防ぐ必要があります。
Nginx上のWordPress環境で、管理ページへのアクセスをNginxの設定で制限する方法としては、allow,denyディレクティブを使用したIPアドレスでの制限方法や、Basic認証(ベーシック認証、基本認証)を設定する方法があります。
そこでここでは、Nginx上のWordPress環境で、WordPressのログインページにBasic認証を設定する方法を紹介します。
Basic認証(Basic Authentication)は、HTTPで定義されている認証方式の一つで「基本認証」とも呼ばれており、ほぼ全てのWebサーバおよびブラウザが対応しています。
なお、Basic認証はユーザー名とパスワードをBase64でエンコードして送信しているだけのため、通信データが盗聴された場合、容易にユーザー情報を盗まれるリスクあります。
そのため、セキュリティを考慮すると、WebサイトをHTTPS化した上での利用が必須といえるでしょう。

目次
動作環境
この記事は、以下の環境での動作結果を基にしています。他のディストリビューションやバージョンでは、動作結果が異なる場合があることをご了承ください。
ソフトウェア | バージョン |
---|---|
CentOS Linux | 7.9.2009 |
Nginx | 1.21.3 |
NginxにBasic認証を追加する
ユーザーを作成する
Nginxでは、Webサイト全体だけでなく、特定のページに対してBasic認証を設定することができます。
ここでは例として、WordPressのログイン画面にBasic認証を設定します。
まず、以下のコマンドを実行して、Basic認証で利用するユーザーを作成するためのツールをインストールします。
# yum install -y httpd-tools
つぎに、以下のコマンドを順に実行して、Basic認証で利用するユーザーを作成します。
なお、作成するディレクトリの名前は任意の名前でOKです。
# mkdir /etc/nginx/passwords
# htpasswd -c /etc/nginx/passwords/.password_basic <ユーザー名>
# パスワードを設定
ユーザーを作成したら「.password_basic」ファイルに、ユーザーの情報が記述されていることを確認します。
以下の例では、user_Aとuser_Bの二つのユーザーが登録されています。
# cat /etc/nginx/passwords/.password_basic
user_A:$apr1$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
user_B:$apr1$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
ユーザーを追加/削除するときは
ユーザーを追加したいときは、以下のコマンドを実行します。
# htpasswd /etc/nginx/passwords/.htpasswd <ユーザー名>
ユーザーを削除したいときは、以下のコマンドを実行します。
# htpasswd -D /etc/nginx/passwords/.htpasswd <ユーザー名>
Nginxの設定ファイルを編集
つぎに、Nginxの設定ファイルで、Basic認証を設定したいlocationディレクティブに設定情報を追記します。
- auth_basicに指定した値は、認証ダイアログに表示されるだけなので任意の文字列でOKです。
- auth_basic_user_fileの値には、作成した.htpasswdファイルのパスを指定します。
server {
<省略>
location ~* /wp-login\.php|/wp-admin/((?!admin-ajax\.php).)*$ {
<省略>
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/passwords/.password_basic;
<省略>
}
<省略>
}
上の設定ファイルでは、locationディレクティブでWordPressのログインページを指定していますが、他のパスを指定すれば、指定したパスでBasic認証を設定できます。
設定ファイルを更新したら、以下のコマンドを実行して設定ファイルに問題がないか確認します。
# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
最後に、設定を反映させるために以下のコマンドでnginxを再起動します。
# systemctl restart nginx
以上で、作業完了です。
動作確認
Basic認証を設定したWebページにブラウザでアクセスしてみると、以下のように認証ダイアログが表示され、認証情報を入力することでページが表示されるようになっているはずです。
あとがき
なお、Webサーバーのセキュリティ対策を実施する場合、Basic認証だけでは心もとないため、しっかりとした対策を行うには、IPアドレスによるアクセス制限を組み合わせたり、ログインの試行回数を制限するなどといった対策を組み合わせることで、強化できるでしょう。