[nginx] nginxでperl/CGIを動かす


yokohama96x96いつもはWordPressやEC-CUBEなど、PHPのアプリケーションを動かすことが多いのですが、Movable Typeをインストールする機会があり、nginxでperl/CGIを動かす設定を追加しました。環境は CentOS 6.4 x86_64、nginxはnginxリポジトリから yum でインストールした nginx-1.4.1-1.el6.ngx.x86_64 です。参考にしたサイトはこちらになります。

まずは yum で perl-CGI と perl-FCGI をインストールします。前者はbaseまたはupdateリポジトリにあり、後者はepelリポジトリにあります。

[ (っ´∀`)っ@友の会 ~]$ sudo yum install perl-CGI
[ (っ´∀`)っ@友の会 ~]$ sudo yum --enablerepo=epel install perl-FCGI

次に、CGIを動かしたいバーチャルホストのconfigに以下を追記します。

    location ~ .pl$ {
        gzip off;
        root   /home/vhosts/MT000/html;
        include /etc/nginx/fastcgi_params;
        fastcgi_pass 127.0.0.1:8999;
        fastcgi_index index.pl;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~ .cgi$ {
        gzip off;
        root   /home/vhosts/MT000/html;
        include /etc/nginx/fastcgi_params;
        fastcgi_pass 127.0.0.1:8999;
        fastcgi_index index.cgi;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

TCP 8999番ポートがiptablesで塞がれている場合は穴をあけておきましょう。

次に FastCGIラッパー /usr/bin/fastcgi-wrapper.pl を作成します。 私の環境では https://library.linode.com/web-servers/nginx/perl-fastcgi/centos-5 に書いてあるそのまま○パクりでいけました。そして FastCGI のラッパーをdaemonとして起動するinitスクリプト /etc/rc.d/init.d/perl-fastcgi も書いてあげます。これもサンプル通りで大丈夫でしょう。それぞれのスクリプトには実行権をつけてあげて、perl-fastcgi はchkconfig でスタートアップに登録してあげます。そして perl-fastcgi を起動後、netstatで8999番ポートがLISTENしているか確認してみましょう。下記のようになっていればOKです。

[ (っ´∀`)っ@友の会 ~]$ netstat -lnt | egrep '(^Active|^Proto|8999)'
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State      
tcp        0      0 127.0.0.1:8999              0.0.0.0:*                   LISTEN

あとはMovable Typeをインストールし、こんな風に表示されればOKです。

mt

ね、簡単でしょう?