nginxでCGI実行環境を整える
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のよくわからない仕様で必要らしい。
とりあえずこんな感じ。