ツイート
シェア
LINEで送る
B! はてぶでブックマーク
Pocketでブックマーク
RSSフィード

nginx, Basic認証の使い方。.htaccessファイルは使わない。

nginx ロゴ
ロゴはnginx.comの商標です。本サイトがNGINX公認であることを示していません。

WebサーバのnginxでBasic認証を行う方法です。

Basic認証はページを表示するのにユーザー名・パスワード入力を求める機能で、Webサーバーでこれを設定すると、ブラウザがユーザー・パスワード入力ボックスを表示させます。

nginxでは .htaccessファイルは使いません。設定ファイルに記述します。

htpasswdコマンドのインストール

Basic認証のユーザ名・パスワード作成にhtpasswdコマンドを使います。

OSにないときはインストールが必要です。ここでは、CentOSのインストール方法です。

ことわりがないかぎり、以降の実行ユーザはすべてスーパーユーザ(root)です。

htpasswdインストール
yum install httpd-tools

.htpasswdファイルの作成

htpasswdコマンドでBasic認証のユーザ名とパスワードを追加します。

htpasswd -c /etc/nginx/.htpasswd [username]

すると、コマンドプロンプトでパスワード入力が求められます。

New password:

パスワードを入力してEnterキーを押します。

Re-type new password:

パスワードの再入力が求められるので同じパスワードを設定します。

指定したパスワードファイルが作成されます。

内容はこんな感じです。

.htpasswdの中
username:$apr1$6wghD96e$Pn64Jp.39XjwD5YO5xj1P1

nginxの設定ファイルにBasic認証を適用

nginxの設定ファイルにBasic認証を適用します。

サイトごとに用意する個別ファイルを編集します。

/etc/nginx/conf.d/***.conf
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認証を適用します。

このとき

allowBasic認証を使わないホスト
denyBasic認証を使うホスト

になります。

サンプルコードは、自サーバ以外からのアクセスはすべてBasic認証を使うようにしています。

satisfy all

すべてのホストからのアクセスにBasic認証を適用します。

allowBasic認証を使うホスト
denyアクセス拒否

satisfyの値によってallowとdenyの意味が変わることに注意しましょう。

nginxの設定反映

Webサーバを再起動して設定内容を反映させます。

nginx再起動
systemctl restart nginx

Webサーバーの再起動ができないとき、サーバーを起動したまま設定を反映させます。

nginx設定反映
systemctl reload nginx

どちらを使ってもかまいません。

前の投稿
Webサイト表示の流れをざっくりとまとめた。HTML,CSSからSPA,SSR,SSGまで。
nginx remit_req, ボットがやらかす集中アクセスを制限する。不正アクセスにも使える。
次の投稿
コメントを残す

*