AC-5

某SEの雑記帳

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テスト」と表示されれば完了です。

 - Linux