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のよくわからない仕様で必要らしい。
とりあえずこんな感じ。