apacheがインストールされているサーバーでcgiファイルを実行しようとしたところ、ファイルの内容が表示されるだけで実行されなかった。デフォルトではこのようにcgiファイルは実行できないとのことなので、この記事ではcgiファイルが実行できるように、apacheの設定方法を備忘録として記載します。
目次
実行環境
- サーバー:IIJ
- OS: Linux
- Webサーバソフトウェア : apache2
実行手順
CGIファイルの作成
まず、実行したいcgiファイルを作成します。ここでは、例としてHello worldを表示させるhello.cgiというファイルを作成します。
例: hello.cgi
#!/usr/bin/python
# -*- coding: utf-8 -*-
print "Content-type: text/html"
print
print "<html>"
print "Hello,World!"
print "</html>"
上記のファイルをドキュメントルートのフォルダーに設置して、権限を付与します。
# chmod 755 ./hello.cgi
apache2の設定
cgiモジュールを使用可能にするための設定
以下のコマンドを実行します。
# cd /etc/apache2/mods-enabled
# sudo ln -s ../mods-available/cgi.load .
# ls -l | grep cgi
# service apache2 restart
次に、
# nano /etc/apache2/sites-available/000-default.conf
を実行し、以下のコメントアウトされている行をコメント解除します。
Include conf-available/serve-cgi-bin.conf
続いて、
sudo nano /etc/apache2/mods-available/mime.conf
上記のコマンドを実行し、以下のコメントアウトされている行をコメント解除 し、CGIファイルと認識させる拡張子名を入力(以下の場合、.cgiと.pyをCGIファイルとして認識)
AddHandler cgi-script .cgi .py
次に以下を実行
nano /etc/apache2/conf-available/serve-cgi-bin.conf
以下のように、
ScriptAliasのところをCGIファイルがあるパスに変更
<Directory “******”>のところを CGIファイルがあるパスに変更
(ここではCGIファイルを置くディレクトリ名を CGI_derとしています。)
<IfDefine ENABLE_USR_LIB_CGI_BIN>
ScriptAlias /CGI_der/ /PATH/TO/CGI_der/
<Directory "/PATH/TO/CGI_der">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Require all granted
</Directory
</IfDefine>
次に以下を実行
nano /etc/apache2/sites-available/CGI_der
実行したら
Options Indexes FollowSymLinks
となっているところを以下のように変更
Options Indexes FollowSymLinks ExecCGI
最後に再起動
sudo service apache2 restart
これで、cgiファイルが実行できるようになっています。