Passengerでbasic/digest認証

Apache+mod_rails環境で、公開時は認証不要の画面だが、テスト中なのでアクセス制限のためにbasic/digest認証を使用したい。

httpd.confのDirectoryディレクティブにRailsのpublicディレクトリを指定してBasic認証を設定すると、Railsのpublicディレクトリに置いた静的なhtmlだけが認証の対象になり、アプリ全体が認証の対象になりませんでした。

Locationディレクティブならばアプリ全体の認証に対して認証が有効になるようです。

<VirtualHost *>
  ServerName example.com
  DocumentRoot /var/www/example.com/railsroot/public
  <Location />
    AuthType Digest
    AuthName "On Testing"
    AuthDigestProvider file
    AuthUserFile /var/www/example.com/htdigestfile
    Require valid-user
  </Location>
</VirtualHost>

Rails自身がbasic認証機能を持っていますが、ソースコードに手を入れる必要があるため、テスト中のみのような一時的な使用には向いていません。

Module: ActionController::HttpAuthentication::Basic