NginxでCGI/PERLを動かす(FCGIWRAP+SPAWN-FCGI)
NginxではCGI/PERLが利用できません。
利用できるようにするには、その為の設定が必要になります。
NginxのCGIとしてPERLを使えるようにするには、「FCGIWRAP+SPAWN-FCGI」と「FCGI-PERL+FASTCGI-WRAPPER.PL」を使う方法があります。
今回は、FCGIWRAP+SPAWN-FCGIで利用できるようにします。
SPAWN-FCGIとfcgi-develのインストール
[root@test]# yum install -y spawn-fcgi fcgi-devel --enablerepo=epel←EPELからインストール
開発環境Development Toolsのインストール
FCGIWRAPのインストールに開発環境Development Toolsが必要になります。
Development Toolsとは、gccやautomake、perlやpythonやデバッガなどのツール類です。
今回のようにソースからコンパイルして導入するタイプのアプリケーションをインストールする場合に必要です。
通常のyum installではなく、yum groupinstallを使い、 Devlopment Toolsの前後には”が必要な事に注意してください。
[root@test]# yum -y groupinstall "Development Tools"←Development Toolsのインストール
FCGIWRAPのインストール
[root@test]# cd ~←適当なディレクトリに移動 [root@test ~]# wget http://github.com/gnosek/fcgiwrap/tarball/master -O fcgiwrap.tar.gz ←fcgiwrapダウンロード [root@test ~]# tar zxvf fcgiwrap.tar.gz←解凍 [root@test ~]# cd gnosek-fcgiwrap-* ←ディレクトリ移動 ビルドしてインストールします [root@test gnosek-fcgiwrap-99c942c]# autoreconf -i [root@test gnosek-fcgiwrap-99c942c]# ./configure [root@test gnosek-fcgiwrap-99c942c]# make [root@test gnosek-fcgiwrap-99c942c]# make install install -d -m 755 /usr/local/sbin install -m 755 fcgiwrap /usr/local/sbin install -d -m 755 /usr/local/man/man8 install -m 644 fcgiwrap.8 /usr/local/man/man8
spawn-fcgiファイルの編集
[root@test]# 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設定ファイル編集
[root@test]# vi /etc/nginx/conf.d/default.conf←Nginx設定ファイル編集(ヴァーチャルサーバの場合は、ヴァーチャルサーバの設定ファイルを編集) ←serverセクション内の適当な箇所に下記を追加 location ~ .cgi$ { fastcgi_pass 127.0.0.1:9001; fastcgi_index index.cgi; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; }
Nginxの再起動とspawn-fcgiの起動
[root@test]# nginx -t←Nginx設定ファイルテスト nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful [root@test]# systemctl enable spawn-fcgi←spawn-fcgiの自動起動設定 [root@test]# systemctl start spawn-fcgi←spawn-fcgiの起動
Perlのパスを追加
Perlのシンボリックリンクを貼って、/usr/local/bin/perlでもアクセスできるようにする。
[root@test]# ln -s /usr/bin/perl /usr/local/bin/perl←シンボリックリンクを貼る
perlでCGIを使う場合
スクリプト内で「use CGI;」を利用可能にする
[root@test]# yum install perl-CGI←perl-CGIのインストール [root@test]# yum –enablerepo=epel install perl-FCGI←perl-FCGIのインストール
待受ポートの確認
[root@test]# netstat -tpan | grep "LISTEN"|grep :9001←spawn-fcgiファイルで指定した9001でfcgiwrapがLISTENしているか確認 tcp 0 0 127.0.0.1:9001 0.0.0.0:* LISTEN 28518/fcgiwrap←fcgiwrapがLISTENしている [root@test]# netstat -tpan | grep "LISTEN"|grep :9000←9000も見てみる tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 2445/php-fpm: pool←php-fpmがLISTENしている
最初はspawn-fcgiとNginxの設定ファイルでポート9000を指定していたのですが、それだとエラーが出て起動できませんでした。
原因は、php-fpmが既にLISTENしている為でした。
テストファイル作成
[root@test]# cd /usr/share/nginx/html←ディレクトリ移動 [root@test html]# vi test.cgi←テストファイル作成 #!/usr/local/bin/perl print "Content-type: text/html\n\n"; print "\n"; print "\n"; print "\n"; print "テスト \n"; print "\n"; print "\n"; print "CGIテスト\n"; print "\n"; print "\n"; [root@test html]# chmod 705 test.cgi←パーミッション変更
これでブラウザでアクセスして「CGIテスト」と表示されれば完了です。