nginx + passengerで、/admin以下のみBasic認証しようとnginx.confに以下の記述をしましたが、/admin以下にアクセスすると全てNot Foundになってしまいました。
server { listen 80; server_name example.com; root /var/www/example.com/rails/public; passenger_enabled on; location /admin/ { auth_basic "Staff Only"; auth_basic_user_file "/var/www/example.com/htpasswd"; } }
nginxデフォルトの404画面が表示されるので、リクエストがpassengerに渡されていないと推測されます。そこで location /admin/ に passenger_enabled on を設定すれば動くのでは?と思って試したところ上手くいきました。
server { listen 80; server_name example.com; root /var/www/example.com/rails/public; location / { passenger_enabled on; } location /admin/ { passenger_enabled on; auth_basic "Staff Only"; auth_basic_user_file "/var/www/example.com/htpasswd"; } }
Basic認証よりDigest認証が良いのですが、残念ながらnginxはまだDigest認証に対応していません。
nginxのBasic認証のパスワードファイルはApache互換で、htpasswdコマンドで作成することができます。Ubuntuではapache2-utilsパッケージに入っており、Apache本体をインストールする必要はありません。