Nginx上のWordPressでログインページにBasic認証(基本認証)を設定する方法

Nginx上のWordPressでログインページにBasic認証(基本認証)を設定する方法

WordPressでWebサイトを運営している場合、WordPressの管理ページにはしっかりとアクセス制限を施して、悪意のある第三者にアクセスされるのを防ぐ必要があります。

Nginx上のWordPress環境で、管理ページへのアクセスをNginxの設定で制限する方法としては、allow,denyディレクティブを使用したIPアドレスでの制限方法や、Basic認証(ベーシック認証、基本認証)を設定する方法があります。

そこでここでは、Nginx上のWordPress環境で、WordPressのログインページにBasic認証を設定する方法を紹介します。

Memo

Basic認証(Basic Authentication)は、HTTPで定義されている認証方式の一つで「基本認証」とも呼ばれており、ほぼ全てのWebサーバおよびブラウザが対応しています。

なお、Basic認証はユーザー名とパスワードをBase64でエンコードして送信しているだけのため、通信データが盗聴された場合、容易にユーザー情報を盗まれるリスクあります。

そのため、セキュリティを考慮すると、WebサイトをHTTPS化した上での利用が必須といえるでしょう。

Nginx上のWordPressでログインページにクライアント証明書による認証を設定する方法
ここでは、Nginx上のWordPress環境で、ログインページにクライアント証明書を利用した認証を設定する方法を紹介します。

動作環境

この記事は、以下の環境での動作結果を基にしています。他のディストリビューションやバージョンでは、動作結果が異なる場合があることをご了承ください。

ソフトウェアバージョン
CentOS Linux7.9.2009
Nginx1.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;
    <省略>
  }
<省略>
}
Memo

上の設定ファイルでは、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ページにブラウザでアクセスしてみると、以下のように認証ダイアログが表示され、認証情報を入力することでページが表示されるようになっているはずです。

Nginx上のWordPressでログインページにBasic認証(基本認証)を設定する方法

あとがき

なお、Webサーバーのセキュリティ対策を実施する場合、Basic認証だけでは心もとないため、しっかりとした対策を行うには、IPアドレスによるアクセス制限を組み合わせたり、ログインの試行回数を制限するなどといった対策を組み合わせることで、強化できるでしょう。