概要
pythonファイルをcgiとして動かしたかったので
そのためにやったことをメモ程度にまとめておく
前提条件
・自分で作成した適当なhtmlの公開まではできている状態
・cgi用のpythonファイルは作成済み
環境
・OS:Ubuntu
・VERSION:16.04.5 LTS (Xenial Xerus)
・apache2 ver:Apache/2.4.18 (Ubuntu)
やったこと
cgiを置くdirectoryの作成
cgiについてしらべると、
・apacheのcgiのdirectoryは何もしなければ/var/www/cgi-bin/になる
・htmlのdir配下には作らないほうがよい
ということがわかった。
自分は/home/username/配下にhtmlのdirectoryをおいていたので
/home/username/配下にcgi用のdirectoryを作成し、その中にpythonファイルをおいた。
Apache2のmoduleファイル適用
次にapache2のcgiを動作させるために下記コマンドを投入
a2enmod cgi
このコマンドにより、mods-enable配下にcgid.confファイルと、cgid.loadファイルが入った。
configファイルの作成
通常apache2のcgiはpythonファイル(.py)を見ないので、.pyをcgiとして認識させるためにconfigファイルを作成する。
ファイルの中身は下記のとおりである。
ScriptAlias /cgi-bin/ "cgiをおいたdirectoryのフルパス"
<Directory "cgiをおいたdirectoryのフルパス">
Options +ExecCGI
AddHandler cgi-script .cgi .py
AllowOverride None
Require all granted
</Directory>
.confファイル説明
ScriptAlias /cgi-bin/ "cgiをおいたdirectoryのフルパス"
この行は/cgi-bin/というdir指定に対して、後ろのpathとして扱うためのもの。
<Directory "cgiをおいたdirectoryのフルパス">
この行は特に説明はないが、ここに書くpathは上の行のpathと微妙に違う。
上の行のは最後に"/"をつけてあげなければならない。
対してこちらはいらない。
Options +ExecCGI
AddHandler cgi-script .cgi .py
AllowOverride None
Optionsの+ExecCGIは<Directory path>で指定したdirectoryに対してCGI実行の許可を出す。
AddHandlerは拡張子を指定することで、その拡張子のついたファイルの実行結果をcgiとして返すようにする。
AllowOverrideに関しては割愛
Require all granted
この文はもともとOrderとallowで書かれていたアクセス制限の文がApache2.2から2.4になってこう書くようになったものらしい。
正直apache触りだしたのここ最近で、そもそも2.2を触ってなかったから知らなかった・・・
Requireを知っていれば検索しようがあったが、知らなかったので2.2の記事等を見てOrderとAllowを素直に書いていたらParmission denyが出たことでたどり着くことができた。
適用されている.confファイルの除外
これに関しては必要かわからないが影響がないと思われるためやったに過ぎない。
除外するファイルはserve-cgi-bin.confで、conf-enabled配下をいじっていなければ適用されているはず。
中身は下記になる
<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/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Require all granted
</Directory>
</IfDefine>
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
このファイルがあるために起こりうる影響は
ScriptAliasがあり、/cgi-bin/に対してエイリアスを張っているためconfigtestを行った時に
エイリアスの対象がかぶっているという警告が出るくらいである。
実働には影響はないと思われる。
apache2 再起動
下記コマンドで行った
/etc/init.d/apache2 restart
確認
http://localhost/cgi-bin/pythonファイル名 で確認
まとめ
こんな感じで手順は少ないが、apache2でpythonで作ったcgiを動かすことに成功した。
実はちょいちょい関係ないことでcgiがうまく動かなかったりしたので、手順の数よりもかなり苦労している。
もうちょっとサーバーというものへの理解を勉強して深めていきたい。