Apacheではデフォルト設定を少し変えるだけでCGIは動作するのですが、Nginxでは設定変更程度では動かず別途ソフトウェアをインストールし設定する必要があります。下記はNginxは既にインストールされているという前提です。
必要なソフトウェアはfcgiwrapとspawn-fcgi/fcgi-develです。順番としてspawn-fcgi/fcgi-develが先で、これらはyumからインストールを行います。
# yum install epel-release # yum install spawn-fcgi fcgi-devel |
この後、fcgiwrapのインストールを行います。これはソースからmakeでインストールします。
# wget http://github.com/gnosek/fcgiwrap/tarball/master # tar xzvf master # cd gnosek-fcgiwrap-gnosek-fcgiwrap-99c942c # autoreconf -i # ./configure # make # make install |
インストールは以上で完了です。続いてspawn-fcgiの設定を行います。
# vi /etc/sysconfig/spawn-fcgi OPTIONS="-u nginx -g nginx -a 127.0.0.1 -p 9001 -P /var/run/spawn-fcgi.pid -- /usr/local/sbin/fcgiwrap" |
さらにNginx側の設定も行います。
# vi /etc/nginx/conf.d/default.conf <省略> location / { root /usr/share/nginx/html; index index.html index.htm index.php index.cgi; } location ~ \.cgi$ { root /usr/share/nginx/html; fastcgi_pass 127.0.0.1:9001; fastcgi_index index.cgi; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } <省略> |
Nginxとspawn-fcgiを起動します。spawn-fcgiはこの段階で既に自動起動は有効になっています。
# systemctl restart nginx # systemctl start spawn-fcgi |
Perlで以下のようなテスト的なスクリプトを書いて本当に動作するか確認してみます。
# vi /usr/share/nginx/html/count.cgi #!/usr/bin/perl print "Content-type: text/plain\n\n"; for($i=1;$i<=10;$i++){ print "Count is $i\n"; } |
このファイルに実行権限をつけ(chmod 755 count.cgi)、ブラウザから以下のような画面が見れればOKです。