Apach2によるCGI実行
〇問題点1 ファイルの所有権 Apache2のCGIファイルの所有者はwww-dataが初期設定である。
従ってCGIファイル、収容ディレクトリー共www-dataとする必要があるが今回はrootで動作しているのでそういう方法もあるのかも。
〇問題点2 perlファイルの作成であるがウィンドウズで作成すると改行コードの関係で
IternalServerErrorが出てしまう。
ラズパイに転送後改行コードを修正するか、ラズパイでファイルの入力をする必要がある。
〇設定ファイルの修正
>sudo vi /etc/apache2/mods-available/mime.conf
219行目のAddHandler cgi-script .cgiのコメントアウトを解除
Pythonを動かす時は .cgiに続いて.py を追記 AddHandler cgi-script .cgi .pyとする。
〇CGI起動用の設定を有効にする
>sudo ln -s /etc/apache2/mods-available/cgi.load /etc/apache2/mods-enabled/cgi.load
availableディレクトリに入ってる設定ファイルをenableディレクトリに入れると有効
/etc/apache2/sites-available/000-default.conf
Include conf-available/serve-cgi-bin.conf先頭の#を外しserve-cgi-bin.confを有効とする
〇必要ならCGI実行ディレクトリを変更
>sudo vi /etc/apache2/conf-available/serve-cgi-bin.conf
<IfDefine ENABLE_USR_LIB_CGI_BIN>
<ScriptAlias /cgi-bin/ /var/www/html/cgi-bin/>
<Directory "/var/www/html/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Require all granted
</Directory>
</IfDefine>
と打って、/usr/lib/cgi-binを/var/www/html/cgi-binに変更するとWEBサーバ公開用ディレクトリに置いた.cgiが実行可能になる。
〇テスト
上で実施した変更をApache2に反映するため再起する。
$ sudo /etc/init.d/apache2 restart
下記のようなCGIの簡単なプログラムを作成し、/var/www/html/cgi-bin/ にtest.cgi等としてセーブするとともに実行権を sudo chmod +x /var/www/html/cgi-bin/test.cgi などで与えておく。
ブラウザから http://192.168.0.xx/cgi-bin/test.cgi でアクセスして正常に表示されれば完了である。
Perlのプログラムに不備がある時は
Internal Server Error
などのエラーがでるのでその場合はエラーメッセージをよく読んでプログラムを点検する。
#!/usr/bin/perl
print "Content-type: text/html\n";
print "\n";
print "<html>\n";
print "<body>\n";
print "abcdef<br>\n";
print "test test test\n";
print "</body>\n";
print "</html>\n";