Ubuntu14.04 LTS でNginx FasCGI Perl

古いPerlのサンプルを参考に復習したくなって、やむなく自分の開発環境にFastCGI環境をセットアップ

最初、コードが間違っているのに気づかず3日ほどあれこれ調べまわっても解決せず時間を浪費した。

502 bad gatewayのエラーでて、ログを見ると Cannot execute script って出てて、調べても分からんし、権限は間違ってるはず無いしでずっとつまずいてた。

結局、

sudo apt-get install fcgiwrap

※もしかしたら libgcgi-perlも必要?でもなんか下記のfastcgi-wrapper.plを使う場合に必要なやつかも
/etc/init.d/fcgiwrap のFCGI_USERあたりを動かしたいユーザーやグループに変更。※お好みで

sudo sysv-rc-conf on fcgiwrap
sudo service fcgiwrap start

でFastCGIが動くようになる。
最初、fastcgi-wrapper.plを使う場合を参考にしてたけど、
参考:http://ubuntu.flowconsult.at/linux/nginx-perl-fastcgi-installation-ubuntu-linux-14-04/
これだとなんかPerlのみっぽかったしTCPだったので、Unixソケットで通信にしたかったのとpythonやRubyでも動かしたかったのでfcgiwrapを使うようにした。

Nginxの設定はlocationディレクティブだけ抜粋すると

#拡張子が.plで終わるリクエストの場合
location ~ \.pl$ {
    try_files $uri = 404;
    gzip off;
    #インストールしたfcgiwrapのソケットファイルのパス
    fastcgi_pass unix:/var/run/fcgiwrap.socket;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    #/etc/nginx/fastcgi_paramsの内容を読み込む。
    include fastcgi_params;
}

sudo service nginx restart

これで適用にperl書いて(シェバンはもちろん#!/usr/bin/env perl ですよ)試したら動きました。

自分はplenvを使っているのですが、システムのperl読み込まれてライブラリねーぞゴルァなった事があった。謎。
plenvの場合、require syscall.ph とかあると駄目っぽい?

この記事書いてる時に見つけた他の方のWeb。先にここを見つけたかった。。。
参考:http://ekzemplaro.org/data_base/doc/web_server/nginx/

やれやれですよ。