Apacheで、特定のディレクトリ、例えば管理者用ログイン画面などを触られたくない場合や、特定のディレクトリを公開したくない場合にする設定のメモです。
# 新規 htpasswd -c /home/user/.htpasswd username # 更新 htpasswd /home/user/.htpasswd username
プロンプトに対し、パスワードを入力すれば.htpasswdファイルが作られます。
次にApacheの設定。色々試しましたが、私にはLocationディレクティブが一番シンプルで設定しやすかったです。
<VirtualHost *:443> ServerName www.example.com:443 ### 中略 ### <Location /somedir/> AuthUserFile /home/user/.htpasswd AuthGroupFile /dev/null AuthName "Input your ID and Password." AuthType Basic require valid-user </Location> </VirtualHost>
なお、.htaccessでやる場合は次の通りです。Satisfy Anyにするため、他に条件をセットする場合は要注意です。
Satisfy Any
AuthType Basic
AuthName "Input your ID and Password."
AuthUserFile /home/user/.htpasswd
require valid-user
SetEnvIf Request_URI "^\/somedir\/.*" somedir
Order Allow,Deny
Allow from all
Deny from env=somedir
Basic認証は生のパスワードが流れるため、どうしてもhttpsで通信したいです。
また、これはあくまでも一時的な認証方法です。apacheの設定ファイルに直書きするため、Apacheの設定変更や、サーバ環境の移転の際などに情報が漏洩するリスクが高いです。