エンジニアが書いてるようなブログ

ゲームプログラマをやっています。仕事やゲームや趣味に関してつらつら

httpdでCGI(perl)実行できたけど、謎だらけ。。。

どうもこんにちは、昨日に引き続き、構築したwebサーバーでperlCGIを動かしていこうと思います。

CGIは古いという声も聞こえますが気にしないで書いていこうと思います。

今回は最後に謎な部分を見つけたのでそれについて謎のまま終わらせようと思います。誰か知っている人がいたら助けてください。

ちなみにサーバーの構築は以前の記事で作ったものを使用しています。
tkymx83.hatenablog.com

はじめに

CGIを起動する場合は、httpdの設定でCGIを起動できるようにするようです。今回はその設定方法と実際にできたページと注意事項を簡単に説明していきます。

ちなみにサーバーは仮想環境上のCentOS6.9です。順番は以下のようになります。

[CentOS] httpd.confの設定

以下のサイト参考にしました
http://mizushima.ne.jp/Windows/HTTP/Apache/Apache-perl.php

まず、centosにrootではいり、vimで設定ファイルを開きます

vim /etc/httpd/conf/httpd.conf

そして、581行目付近のDirectoryの設定のOptionを以下のように変更します。

<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options ExecCGI
    Order allow,deny
    Allow from all
</Directory>

Options ExecCGIとすることで指定したディレクトリでCGIが使えるようになるそうです。既存の設定を引き継ぎたい場合は+をつけてください。

次に796行目付近の#でコメントアウトされている文の#を外してください。そうすると以下のようになると思います。

AddHandler cgi-script .cgi

こうすることで.cgiのファイルがcgiの対象となるそうです。
以上で設定は終了です。

[CentOS] perlファイル(CGI)の設置

デフォルトではcgiを入れるフォルダは以下のフォルダになっていると思います。

/var/www/cgi-bin/

ここにcgiファイルをいれましょう。サンプルを用意しておきます。

hello.cgi

#!/usr/bin/perl

print "Content-type: text/html\n\n";
print "<html><body>";
print "<h2>hello wprld</h2>";
print "</body></html>";
exit;

[Mac] CGIの表示

次は実行です。service httpd start でサーバーを起動してmacのブラウザで以下のurlを打ってみましょう。

localhost:8888/cgi-bin/hello.cgi

以上成功すると hello wprldとだけ表示されると思います。
これは、perlのコードが実行された出力結果をhtmlファイルとして取得しているということになります。

ちなみに
print "Content-type: text/html\n\n";
をつけないとブラウザがhtmlファイルと認識しないので文字だけ出力されてしまいますよ〜。

おわりにと謎

今までの説明で"になるようです。"みたいな、曖昧な喋りからに築いた人入るでしょうか?
なぜこんな喋り方をしているかというと、僕の環境では "[CentOS] httpd.confの設定"を行わなくてもなぜか、cgiが実行できてしまったからです。

なぜ。。。。

予想としては、もっと大元の設定でExecCGIやAddHandlerがセットされているからなのかと思います。。。

確信がついたらまら更新するのでこれからもよろしくお願いします。