勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

Nginxで特定のディレクトリに対してBasic認証を設定

   2021/08/10  Nginx サーバー

Nginxで特定のディレクトリに対してBasic認証を設定したい。Apacheだとhtaccess及びhtpasswdファイルをアップロードするだけで設定できたがNginxだとhtaccessが使えない。ではApacheを導入しないといけないのかと思ったがそういう訳ではなく、割と簡単に設定する方法があった。以下に対応方法をメモ。

 

htpasswdファイルの作成

#httpd-toolsのインストール
yum install -y httpd-tools

#Basic認証用のユーザを登録(test_user部分は適宜変更する)
htpasswd -c /etc/nginx/.htpasswd test_user

上記でユーザ登録をするとパスワードを聞かれるので適宜入力する。

 

Nginx設定

#設定ファイルを編集
vi /etc/nginx/conf.d/default.conf

#以下をBasic認証をかけたいドメイン部分のserver{}内に追記する。またpass部分はBasic認証をかけたいディレクトリ名になる。
location /pass/ {
    auth_basic "Auth";
    auth_basic_user_file "/etc/nginx/.htpasswd";
    location ~ \.php$ {
        root /usr/share/nginx/html;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

#構文チェック
nginx -t

#nginx再起動
systemctl restart nginx

再起動後に該当ディレクトリにアクセスすると認証状況が確認できる。尚、location ~ \.php${}が無いと、「https://test.com/pass/」ディレクトリ自体にはBasic認証はかかるものの「https://test.com/pass/test.php」のようなページを開いてもBasic認証が聞かれないので注意する。

 

所感

Basic認証の都度、SSH接続してNginxの設定ファイルを編集するというのは多少手間に感じた。とはいえApacheでもhtaccessファイルを利用するのは推奨していないっぽいのでこの辺りの意識は変えていかないといけないのかも。

 

参考サイト

https://www.t3a.jp/blog/infrastructure/nginx-basic-auth/

 - Nginx サーバー

  関連記事

Nginxのバーチャルホスト設定とLet's Encryptの導入

NginxでVirtualHostの設定し、複数のドメインを同一サーバに割り当て ...

Nginxでリダイレクト(http->https)及びリライト設定

Nginxでhttpアクセス時にhttpsリダイレクトさせたい。それとは別に「h ...

CentOS7系にLEMP環境(Linux + Nginx + MySQL + PHP)を構築

先日KAGOYAのVPSからIndigoに移行した際にCentOS6から7へバー ...