俺だけのために Ore! Tips!

Apache(httpd-2.0.50)で Basic 認証設定

2004年10月12日 作業

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


よし、正常に起動した!!
オッケー!!

前ページに戻る


Copyright (C) 2004 S.Maaasamasa.