nginxでBasic認証の設定方法

Apacheのhtpasswdはインストールせずにopensslでパスワードファイル作成する方法です。

ユーザーファイルの作成とパーミッション設定

$ sudo echo "ユーザ名:$(openssl passwd -apr1 パスワード)" > /usr/share/nginx/html/user_passwords
$ sudo chmod 400 /usr/share/nginx/html/user_passwords
$ sudo chown nginx /usr/share/nginx/html/user_passwords

ここでは、nginx(Nginxの実行しているシステムユーザー)のみのパーミッションに設定しています。
また簡易なプレビューサイトを想定して、ドキュメントルート以下においてますが、
実際の運用では適時DocumentRootより上位ディレクトリなどへの配置に変更ください。
(まぁ運用の場合、そもそもBasicな認証で良いのかというのは、)

Nginxのコンフィグファイルの設定

server {
    listen       80;
    server_name  example.com;
    root   /usr/share/nginx/html/example.com;
    index  index.php index.html;
    auth_basic "preview site";
    auth_basic_user_file /usr/share/nginx/html/user_passwords;
    location / {
        〜略〜
    }
}

server { ~ } のコンテキストに記載してこのドメイン全てに反映。
http{ ~ } , location { ~ } に書いて、サーバーのhttp全体、特定ディレクトへの反映も可能