Apache2.4でCGIを有効化する(Ubuntu18)

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

というコマンドを上で利用しましたが以下のような意味になります.

apach2conf-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できるのは確かに便利です.


スポンサーリンク

コメントを残す