はじめに
備忘録
どなたかのお役に立てれば幸いです。
問題の詳細
.htaccess
ファイルと.htpasswd
を置き、Webサイトにアクセス後、ちゃんとBasic認証の画面が出た。
その後、入力したユーザー名とパスワードは合っているはずなのに、なぜか500エラーが出た。
解決方法
まず、エラーログを確認してみます。
$ cat /var/log/apache2/error.log
以下の2パターンに遭遇しました。
# パターン1
AH01617: user username: authentication failure for "/path/to/.htpasswd": Password Mismatch
# パターン2
Permission denied: Could not open password file: /path/to/.htpasswd
パターン1
こちらは、htpasswd
コマンドを使って.htpasswd
ファイルを作ることで解決しました。
vim
などで自分で作成した.htpasswd
ファイルだと、うまく動作しないそうです。
具体的には、コマンドで作成すると、以下のように、パスワードの部分を自動で暗号化してくれるみたいです。
ただ、暗号化の種類がいくつかあるようなので、Webサイト上で.htpasswd
を作成してくれるサイトよりは、ターミナル上でhtpasswd
コマンドを実行した方が確実かもしれません。
Basic認証の画面上では、自分で設定したパスワードを打てば認証されます。
わざわざ暗号化されたパスワードを打つ必要はありません。
$ vim /path/to/.htpasswd
username:testpassword
$ htpasswd -c /path/to/.htpasswd username
New password:
Re-type new password:
Adding password for user username
$ cat /path/to/.htpasswd
username:$apr1$cPda4fWy$cASDFTf90/DojGK89UJkr9
ちなみに、以下のコマンドを実行することで、.htpasswd
の中身を更新できます。
$ htpasswd -b /path/to/.htpasswd username newpassword
パターン2
こちらは、単純にパーミッションの設定がうまくいってない場合もありますが、自分の場合は、.conf
ファイル内でのBasic認証の記述が間違っていました。
<Proxy *> ~ </Proxy>
や<Directory /your/site/path> ~ </Directory>
も試しましたが、結局、以下のように変更することで、Basic認証後も500エラーが出ることなく、Webページが正常に動作するようになりました。
<VirtualHost *:80>
ServerName mysite.example.com
ProxyPass / http://127.0.0.1/
ProxyPassReverse / http://127.0.0.1/
<Location "/">
AuthType Basic
AuthName "Basic Authentication"
AuthUserFile /path/to/.htpasswd
Require user username
</Location>
</VirtualHost>