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 として認識させるわけです.ついでに Perl や Ruby や Python のよくある拡張子も追加しましょう.
これで後は
% sudo /etc/init.d/apache2 restart
で再起動してやれば OK.後はパーミッションの設定や Perl や Ruby のインタプリタへのパスを間違えないように,という初歩的なことに気を付けて CGI を試しましょう.
以上ですが,Apache のことはまだまだ分からないことが多いので何か勘違いしてるかもしれません.参考にする場合は信じ切らないように.
参考サイト
あと Twitter で色々.詳しくは以下を.
Togetter - 「Ubuntu Server 10.10, Apache2, CGI 設定」