nginxでCGI実行環境を整える

Posted on 2017/05/10 in tech

MovableTypeのサイトをAWSに移行した際のメモ。

環境はAWSのubuntu 16.04 LTS。PerlのCGI環境を整えた。

nginxインストール

$ sudo apt -y install nginx

CGI実行ラッパをインストール

nginxはCGIを実行できないらしく。CGIをFCGIでラップするfcgiwrapを用いる。

$ sudo apt -y install fcgiwrap

nginx設定

nginxの大元の設定ファイルは

/etc/nginx/nginx.conf

で、当該ファイルのincludeで読み込むファイルに下記を追記することで、.cgi のファイルをCGIとして実行できる。

server {
~~~ 中略 ~~~
    location ~ \.cgi$ {
        root /path/to/root;
        fastcgi_pass unix:/var/run/fcgiwrap.socket;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
~~~~~~~~~~
}

nginxを再起動しておくこと。

$ sudo service nginx restart

fcgiwrapの設定

/etc/init.d/fcgiwrapを編集する

 FCGI_CHILDREN

この数だけCGI実行プロセスがforkされる?

ぶっちゃけよくわかっていない。

サーバのスペックや実行アプリケーションの処理コスト(起動数?)とかで最適化するものなのか。

FCGI_USER
FCGI_GROUP

CGIを実行するユーザとグループ。 nginx側の設定に合わせる。

aptでnginxを普通に入れてたら単純にnginxでいい。

FCGI_SOCKET_OWNER
FCGI_SOCKET_GROUP

/var/run/fcgiwrap.socketの所有者。直前行のコメントにも書いてあるけどコメントアウトする。

設定したらfcgiwrapを再起動。

$ sudo systemctl restart fcgiwrap

テスト

正常にアクセスできるか確認する。

#!/usr/bin/perl

print "Content-Type: text/html\n\n";
print "<html>";
print "<head><title>Test</title></head>";
print "<body>";
print "<p>This is CGI Test</p>";
print "</body>";
print "</html>";

忘れちゃならないのは実行権限をつけておくこと。

$ chmod 755 testcgi.cgi

アクセスすると、unable to resolve host が表示された。。

/etc/hostsにホスト名を追加する

$ sudo echo "127.0.1.1 $(hostname)" >> /etc/hosts

127.0.1.1はubuntuかdebianのよくわからない仕様で必要らしい。

とりあえずこんな感じ。