WebサーバのnginxでBasic認証を行う方法です。
Basic認証はページを表示するのにユーザー名・パスワード入力を求める機能で、Webサーバーでこれを設定すると、ブラウザがユーザー・パスワード入力ボックスを表示させます。
nginxでは .htaccessファイルは使いません。設定ファイルに記述します。
htpasswdコマンドのインストール
Basic認証のユーザ名・パスワード作成にhtpasswdコマンドを使います。
OSにないときはインストールが必要です。ここでは、CentOSのインストール方法です。
ことわりがないかぎり、以降の実行ユーザはすべてスーパーユーザ(root)です。
yum install httpd-tools
.htpasswdファイルの作成
htpasswdコマンドでBasic認証のユーザ名とパスワードを追加します。
htpasswd -c /etc/nginx/.htpasswd [username]
すると、コマンドプロンプトでパスワード入力が求められます。
New password:
パスワードを入力してEnterキーを押します。
Re-type new password:
パスワードの再入力が求められるので同じパスワードを設定します。
指定したパスワードファイルが作成されます。
内容はこんな感じです。
username:$apr1$6wghD96e$Pn64Jp.39XjwD5YO5xj1P1
nginxの設定ファイルにBasic認証を適用
nginxの設定ファイルにBasic認証を適用します。
サイトごとに用意する個別ファイルを編集します。
location ~* /wp-login\.php|/wp-admin/((?!admin-ajax\.php).)*$ {
satisfy any;
allow 127.0.0.1;
deny all;
auth_basic "basic authentication";
auth_basic_user_file "/etc/nginx/.htpasswd";
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_buffers 256 128k;
fastcgi_buffer_size 128k;
fastcgi_intercept_errors on;
fastcgi_read_timeout 120s;
}
}
2-6行目
Basic認証の設定です。くわしくは後述。
7-20行目
php-fpmを使うときの設定です。
locationで指定しているパスは、WordPressのユーザログイン画面、管理画面をBasic認証の対象ページに指定しています。
satisfy any
特定のホストからのアクセスだけにBasic認証を適用します。
このとき
allow | Basic認証を使わないホスト |
deny | Basic認証を使うホスト |
になります。
サンプルコードは、自サーバ以外からのアクセスはすべてBasic認証を使うようにしています。
satisfy all
すべてのホストからのアクセスにBasic認証を適用します。
allow | Basic認証を使うホスト |
deny | アクセス拒否 |
satisfyの値によってallowとdenyの意味が変わることに注意しましょう。
nginxの設定反映
Webサーバを再起動して設定内容を反映させます。
systemctl restart nginx
Webサーバーの再起動ができないとき、サーバーを起動したまま設定を反映させます。
systemctl reload nginx
どちらを使ってもかまいません。