Apache(httpd-2.0.50)で Basic 認証を。
以前は .htaccess ファイルを、アクセス制限したいディレクトリに置く形を取っていたのだが・・・
.htaccess を利用する形を取ると、毎回(ほんとに1ファイルへのアクセスがある度に).htaccess ファイルが読み込まれ(あるいは存在チェックを行われ)非常に非効率的である。極力この方法は採用するべきではないのだよ。
でも、まあ、ISP のサーバだと、ユーザーが自由に自分のホームページについてはアクセス制限設定を出来るようにしとかないといけないから仕方ない部分はあるんだけどね。
うちのサーバでは、お客さんが独自に .htaccess ファイルを置いて Basic 認証を行いたいというケースは希なので、.htaccess を置く代わりに httpd.conf の Directory セクション への諸々の記述で設定を行う。
以下は、DocumentRoot/admin と、DocumentRoot/cgi-bin/admin に Basic 認証をかける例。
まずは、Apache の設定ファイル(/usr/local/apache/conf/httpd.conf)を確認。
AllowOverride None になっているか?
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory "/usr/local/share/apache/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
ふむ、ふむ。ちゃんとなってるな・・・と思ったら、
<Directory "/usr/local/share/apache/htdocs">
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#Options Indexes FollowSymLinks
Options FollowSymLinks
#AllowOverride None
AllowOverride All
Order allow,deny
Allow from all
</Directory>
いかーん!!「AllowOverride All」に変更してるじゃん、俺。
元に戻そう。
AllowOverride None
#AllowOverride All
と。
で、よく考えたら、今回は VirtualHost で設定しているサイトの話だった。(ほげほげ病院 www.hogehoge-hp.jp)
なので、
<VirtualHost www.hogehoge-hp.jp:80>
ServerAdmin root@hogehoge-hp.jp
DocumentRoot /usr/local/share/apache/hosts/www.hogehoge-hp.jp
ServerName www.hogehoge-hp.jp
ErrorLog /var/log/apache/logs/www.hogehoge-hp.jp/error_log
CustomLog /var/log/apache/logs/www.hogehoge-hp.jp/access_log combined
ScriptAlias /cgi-bin/ "/usr/local/share/apache/hosts/www.hogehoge-hp.jp/cgi-bin/"
<Directory "/usr/local/share/apache/hosts/www.hogehoge-hp.jp/cgi-bin">
Options ExecCGI
</Directory>
</VirtualHost>
ここだな。ここを直さないといけない。
上記の VirtualHost セクションを以下のように修正する。
<VirtualHost www.hogehoge-hp.jp:80>
ServerAdmin root@hogehoge-hp.jp
DocumentRoot /usr/local/share/apache/hosts/www.hogehoge-hp.jp
ServerName www.hogehoge-hp.jp
ErrorLog /var/log/apache/logs/www.hogehoge-hp.jp/error_log
CustomLog /var/log/apache/logs/www.hogehoge-hp.jp/access_log combined
<Directory "/usr/local/share/apache/hosts/www.hogehoge-hp.jp">
AllowOverride None
</Directory>
<Directory "/usr/local/share/apache/hosts/www.hogehoge-hp.jp/admin">
AuthType Basic
AuthUserFile /usr/local/share/apache/hosts/www.hogehoge-hp.jp/admin/.htpasswd
AuthGroupFile /dev/null
AuthName "Please enter your ID and password"
Require valid-user
</Directory>
ScriptAlias /cgi-bin/ "/usr/local/share/apache/hosts/www.hogehoge-hp.jp/cgi-bin/"
<Directory "/usr/local/share/apache/hosts/www.hogehoge-hp.jp/cgi-bin">
Options ExecCGI
</Directory>
<Directory "/usr/local/share/apache/hosts/www.hogehoge-hp.jp/cgi-bin/admin">
AuthType Basic
AuthUserFile /usr/local/share/apache/hosts/www.hogehoge-hp.jp/admin/.htpasswd
AuthGroupFile /dev/null
AuthName "Please enter your ID and password"
Require valid-user
</Directory>
</VirtualHost>
パスワードファイルを作る。
serv2# /usr/local/apache/bin/htpasswd -cb .htpasswd hogehoge-hp p@sUw0rD
Adding password for user hogehoge-hp
serv2# cat .htpasswd
hogehoge-hp:1gpQ9C8raC6ta
ほんとは、ドキュメントルートの外に作るのが望ましいのだが、ホスティングユーザーにはドキュメントルート以下にしかアクセスを許していないので、今回はここに作る。(単にホスティングユーザーのファイルをまとめておきたいだけ:-P)
コンフィグファイルを修正したので、Apache のリスタート。
serv2# /usr/local/apache/bin/apachectl configtest
Syntax OK
serv2# /usr/local/apache/bin/apachectl restart
serv2# ps -ax|grep httpd
2241 ?? Ss 0:46.40 /usr/local/apache2/bin/httpd -k start
12765 ?? I 0:00.01 /usr/local/apache2/bin/httpd -k start
12766 ?? I 0:00.01 /usr/local/apache2/bin/httpd -k start
12767 ?? I 0:00.00 /usr/local/apache2/bin/httpd -k start
12768 ?? I 0:00.03 /usr/local/apache2/bin/httpd -k start
12769 ?? I 0:00.02 /usr/local/apache2/bin/httpd -k start
12770 ?? I 0:00.02 /usr/local/apache2/bin/httpd -k start
12772 ?? I 0:00.01 /usr/local/apache2/bin/httpd -k start
12865 p0 R+ 0:00.00 grep httpd
よし、正常に起動した!!
オッケー!!
|
|