Aapcheを触る機会があって,CGIでPythonを動かしたかったのですがエラーの連続で,ソース内容がそのまま表示されたり,スクリプトURLに飛ぶと保存するかどうか聞かれたり,Not Foundと言われたり,色々発生しましたが何とか動きましたので,メモを残します.
設定ファイルの理解
これが厄介.
conf-available/ conf-enabled/ mods-available/ mods-enabled/ sites-available/ sites-enabled/
/etc/apache2/はこのような感じでディレクトリがあります.語尾の”available”が利用可能な設定で”enable”が現時点で有効な設定ファイルが入っています.
実は,”enable”の中身は”available”の中身のシンボリックリンクになっていてただ単に”available”から読み取ってきているだけです.なので編集すべきファイルは全て”available”のディレクトリ内ファイルになります.
試しにmods-siteenableを覗いてみると
access_compat.load@ authz_user.load@ dir.load@ negotiation.load@ alias.conf@ autoindex.conf@ env.load@ reqtimeout.conf@ alias.load@ autoindex.load@ filter.load@ reqtimeout.load@ auth_basic.load@ cgid.conf@ mime.conf@ setenvif.conf@ authn_core.load@ cgid.load@ mime.load@ setenvif.load@ authn_file.load@ deflate.conf@ mpm_event.conf@ status.conf@ authz_core.load@ deflate.load@ mpm_event.load@ status.load@ authz_host.load@ dir.conf@ negotiation.conf@
と,現在有効になっている設定ファイルが表示されます.
CGIディレクトリの設定
既に土台が用意されているのでそれを利用しましょう.
/etc/apache2/conf-available/serve-cgi-bin.conf
以下のように書き換えて http://localhost/cgi-bin/XXX.pyが有効になるようにします.
<IfModule mod_alias.c> <IfModule mod_cgi.c> Define ENABLE_USR_LIB_CGI_BIN </IfModule> <IfModule mod_cgid.c> Define ENABLE_USR_LIB_CGI_BIN </IfModule> <IfDefine ENABLE_USR_LIB_CGI_BIN> ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" AddHandler cgi-script .cgi .py <Directory "/var/www/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Require all granted </Directory> </IfDefine> </IfModule>
CGI関係のものは/var/www/htmlの下には置いてはいけないようですので気をつけてください.
設定を有効にする
書き換えただけでは有効にはなりません.
a2enconf serve-cgi-bin.conf
とすると,conf-enableの中にリンクが生成され有効になります.更にCGI自体を有効にするために,モジュールを有効にします.
a2enmod cgi
これで実行できればOKなはずです.
(おまけ)コマンドを理解する
a2ensite serve-cgi-bin.conf
というコマンドを上で利用しましたが以下のような意味になります.
apach2のconf-availableのserve-cgi-bin.confというファイルを有効(en)にする
a2(有効/無効)(ディレクトリ) (設定ファイル)
という構成になっています.有効は(en),無効は(dis)です.
//siteディレクトリのABC.confを有効にする a2ensite ABC.conf //siteディレクトリのABC.confを無効にする a2dissite ABC.conf //modsディレクトリのXYZモジュールを有効にする a2enmod XYZ //modsディレクトリのXYZモジュールを無効にする a2dismod XYZ
簡単に有効,無効が切り替えられるようにこのようなディレクトリ構成になっていたようでした.コマンドで個々の機能がON/OFFできるのは確かに便利です.