ApacheでCGIの設定をしてみる
何故今さらCGI??という向きもありましょうが、そんな事は気にせず突き進むのであります。
実のところは、C言語にケチョンケチョンに返り討ちをくらう毎日に若干凹んでしまい、色々な解説サイトをフラフラ彷徨っていたところ「Cで書くCGI」について言及されているサイトをまたもや発見。
コッソリとPythonやRubyのチュートリアルなぞ読んでみたりしている事もあり、ローカルに入れてるApacheで色々遊べるようにCGIが実行出来るように設定をしておこうと、まぁこういうワケです。
しかし、いつか本職の皆さんにドツかれそうな適当具合ですね(= ‘艸’)ムププ
Ubuntu9.04の場合
UbuntuというかDebian系の場合は、以前も書いたように設定ファイルを細かく分散して管理しているようですね。RedHat系の設定ファイル構成に慣れているので、なかなか細かい所まで覚えきれません。
それっぽいファイル「apache2.conf」や「htttpd.conf」にゴリゴリ設定を追記していくべきではなさそう(httpd.confに至っては何も記述されていませんし)なので、今回もGoogle先生にお世話になりまくりです。
で、ローカルだし面倒だし「cgi-bin」ディレクトリ以外でもCGIが実行されるようにしたいな~、と以下のように設定してみました。
;; 念のためバックアップしておくのが無難(常識?)ですね $ sudo vi /etc/apache2/sites-enabled/000-default
このファイルを見てみると、DocumentRootが「/var/www」である事と「cgi-bin」ディレクトリが「/usr/lib/cgi-bin/」エイリアスになっており、かつ「ExecCGI」の指定もあるので、ここに.cgiファイルを置けば面倒な設定をせずともアッサリ動かせそうですね。しかし、今回の目的上華麗にスルー!!
;; どこに置いても動くようにしたいので <Directory /var/www/> Options Indexes FollowSymLinks MultiViews ExecCGI <- 追記 AllowOverride All Order allow,deny allow from all </Directory>
これで、
$ sudo apache2ctl configtest $ sudo apache2ctl graceful
とApacheを再起動すればCGIが動くはず!!アレ??configtestやgracefulの時点で「apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1」と言われます(゚_。)?
調べてみたところ、設定ファイルで「ServerName」が指定されていないとこのメッセージが出る模様。なので、以下追記です。
;; ここで良いのでしょうかね?? $ sudo vi /etc/apache2/apache2.conf (~中略~) ServerRoot "/etc/apache2" ServerName localhost <- 追記
さて、これでミーハーよろしく「/var/www/」下に「sandbox」なんてディレクトリを作ってみて、そこにこれまたミーハー気分で、C言語で作成したバイナリファイル(getenv.cgi)を置いてみました。
で、「http://localhost/sandbox/getenv.cgi」にアクセスすると…。アレアレ??ブラウザがファイルをダウンロードしようとします(・_・?)
単純に.cgiファイルがCGIとして認識されていないようですので、今度は以下のように。
;; ここにありました $ sudo vi /etc/apache2/mods-enabled/mime.conf AddHandler cgi-script .cgi <- コメントアウト(#)を削除
これで、再度Apacheを再起動して先ほどのURLにアクセスすると…。無事表示されました~。中身はUser AgentとIPアドレスを表示するだけのものですが…(*´σー`)
公開サーバなどであれば、もっとセキュリティ面に配慮して設定すべきなのでしょうが、ローカルで閉じた環境のオレオレサーバなのでこれでOKかと。さて、Ubuntuが設定出来たらFedoraもやりたくなるのが心情というもの!!
Fedora 11の場合
FedoraやCentOSだと「/etc/httpd/conf/httpd.conf」に設定が集約されていますので、とにかくまずはこれを見れば良いですね。Ubuntuとの違いはDocumentRootが「/var/www/html」になるという点ぐらいでしょうか??
それ以外は、上記を参考にすれば書き留めておく程の事もなく終了してしまいました。
これで、PythonやRuby/Perlで遊べるぞ~!!ってC言語をやらんかい!!という話です。しかし、C言語は手強いですね~。「文字列」を扱うとすぐに混乱してしまいます。でも、その分ちゃんとコンパイルが通って動いた時の感激もひとしおなので頑張りますですよ~。
文脈からも分かるように、最近Pythonが気になって気になって仕方がなかったりもしますが…。
今日はここまでヾ(*’-'*)マタネー♪
