株式会社ライブキャストロゴ 株式会社ライブキャスト

作成中のWebサイトやWebサービスを、公開前に仲間うちでパスワードをかけて共有したいという場合がありますよね。

そんな時、簡易的にBasic認証を使用すると便利です。

今回は、nginxでBasic認証させるための設定方法を簡単にまとめたいと思います。

設定するにあたっては、こちらのサイトを参考にさせていただきました。
Nginx でベーシック認証をかける手順メモ – bekkou68の日記

まず、Basic認証で使用するユーザIDとパスワードを記載しておく.htpasswdという名前のファイルを作成しておきます。

nginxのデフォルトのコンテキストルートに作成しました。

コンテキストルートは、nginx.confに記載されています。

[root@ip-10-132-7-62 html]# cd /etc/nginx/
[root@ip-10-132-7-62 nginx]# emacs nginx.conf
server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;                                                                                                

        #access_log  /var/log/nginx/host.access.log  main;                                                              

        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm index.php;
        }

10行目の記載がコンテキストルートです。

[root@ip-10-132-7-62 nginx]# cd /usr/share/nginx/html/
[root@ip-10-132-7-62 html]# emacs .htpasswd 

.htpasswdは

ユーザID:パスワード

の形式で記載します。

パスワードは暗号化されたパスワードを記載します。

暗号化はどうしたらいいの?

Basic認証(ベーシックにんしょう、Basic Authentication)とは、HTTPで定義される認証方式の一つ。基本認証と呼ばれることも。

Basic認証では、ユーザ名とパスワードの組みをコロン “:” でつなぎ、Base64でエンコードして送信する。このため、盗聴や改竄が簡単であるという欠点を持つが、ほぼ全てのWebサーバおよびブラウザで対応しているため、広く使われている。

Basic認証 – Wikipediaより引用。

とあるのですが、手っ取り早く設定したい時などは、便利なツールを公開してくれている方がいますので、こちらを利用するといいでしょう。

BASIC認証用 パスワード暗号化ツール



ユーザID、パスワードを入力すると、.htpasswdに記載する形式で暗号化結果を出力してくれます。

これをコピペし、/usr/share/nginx/html/に.htpasswdを保存しました。

次に、Basic認証するということと、.htpasswdがどこに保存されているか?ということをnginx.confに記載します。

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;                                                                                                

        #access_log  /var/log/nginx/host.access.log  main;                                                              

        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm index.php;
            auth_basic "Restricted";
            auth_basic_user_file /usr/share/nginx/html/.htpasswd;
        }

12、13行目の2行を追記します。

12行目のauth_basicの値は、任意で良いかと思います。
13行目のauth_basic_user_fileの値は、.htpasswdのパスを記載します。

今回、.htpasswdはnginxのコンテキストルートに保存しましたが、必ずしも、ルート配下にする必要もなさそうです。例えば、/etc/nginx/.htpasswdとした場合には、

            auth_basic_user_file /etc/nginx/.htpasswd;

または、相対パスで

            auth_basic_user_file .htpasswd;

とすればいいのだと思います。実際に試してはいませんが…
※ nginx.confも/etc/nginxに保存されていますので、相対では.htpasswdですね。

nginxを再起動します。

[root@ip-10-132-7-62 nginx]# /etc/init.d/nginx restart
nginx を停止中:                                            [  OK  ]
nginx を起動中:                                            [  OK  ]

ブラウザでアクセスすると、



Basic認証のダイアログが表示されるようになりました。

これで、コンテキストルート配下すべてのコンテンツに認証がかかるようになったので、オープン前の一時的な非公開時などには有効に利用できるのではないでしょうか。

※ 但し、Basic認証ではユーザID、パスワードが平文で送られるのでコンテンツによっては扱いに注意するようにしましょう。