Apache2, CGI を各ユーザのディレクトリで実行可能にする設定

さくら VPS 上の Ubuntu Server 10.10 で動く Apache2 (Ubuntu) での,CGI に関する設定メモ.

Apache2 をインストールして,ユーザごとに公開出来るディレクトリを保持してる状況まで進んでること前提.つまり

% sudo aptitude install apache2
% sudo a2enmod userdir

して

/etc/apache2/mods-available/userdir.conf

<IfModule mod_userdir.c>
        UserDir public_html
        UserDir disabled root

        <Directory /home/*/public_html>
                AllowOverride FileInfo AuthConfig Limit Indexes
                Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
                <Limit GET POST OPTIONS>
                        Order allow,deny
                        Allow from all
                </Limit>
                <LimitExcept GET POST OPTIONS>
                        Order deny,allow
                        Deny from all
                </LimitExcept>
        </Directory>
</IfModule>

的な設定をしてある状態.public_html という名前なんかはサーバ管理者それぞれの人によりけりだと思います.

あと当然 Perl なんかのインストールも済んでるものとします.

で,デフォルトのままでは,

/usr/lib/cgi-bin/

ディレクトリに設置したファイルしか CGI として動かせません.原因は先ほど示した Options ディレクティブに ExecCGI が無いためです.ExecCGI が指定されてないところでは CGI は動かせないのです.

てことでさっきの userdir.conf ファイルにあった Options に ExecCGI を追加します.

<IfModule mod_userdir.c>
        UserDir public_html
        UserDir disabled root

        <Directory /home/*/public_html>
                AllowOverride FileInfo AuthConfig Limit Indexes
                Options ExecCGI MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec # この行が変化
                <Limit GET POST OPTIONS>
                        Order allow,deny
                        Allow from all
                </Limit>
                <LimitExcept GET POST OPTIONS>
                        Order deny,allow
                        Deny from all
                </LimitExcept>
        </Directory>
</IfModule>

こういう感じに.

あと,CGI と認識する拡張子の設定も必要です.

/etc/apache2/mods-available/mime.conf

にある

#AddHandler cgi-script .cgi

という行を

AddHandler cgi-script .cgi .pl .rb .py

とでもしてやりましょう.要するにコメントアウトを外して,.cgi という拡張子を CGI として認識させるわけです.ついでに PerlRubyPython のよくある拡張子も追加しましょう.

これで後は

% sudo /etc/init.d/apache2 restart

で再起動してやれば OK.後はパーミッションの設定や PerlRubyインタプリタへのパスを間違えないように,という初歩的なことに気を付けて CGI を試しましょう.

以上ですが,Apache のことはまだまだ分からないことが多いので何か勘違いしてるかもしれません.参考にする場合は信じ切らないように.

参考サイト

あと Twitter で色々.詳しくは以下を.
Togetter - 「Ubuntu Server 10.10, Apache2, CGI 設定」