nginx+SCGI+web2pyの構成をお試し中
nginx+uWSGI+web2pyの構成で3ヶ月ぐらい運用していたのですが,あるトラブルがありuWSGIをSCGIに置き換えて様子を見ています。
「あるトラブル」とは?
運用しているサイトは帳票開発ツールのデモサイトなので,応答として動的に生成したPDFを返すページがいくつかあります。 最初のうちは問題ないのですが,しばらく使っているとPDFを生成するページで応答が返らなくなり, Gateway Errorとなってしまうというものです。
プロセスの状態を確認すると,uwsgiのプロセスがCPU使用率100%の状態になっていて,いつまで経っても使用率は下がりません。 こうなると,uwsgiサービスを再起動するしかありませんでした。
色々調べたのですが原因が分からず,uWSGIを他の物に置き換えて様子を見ることにしました。 切り替えて2日ぐらい経過しましたが,今のところ問題は発生していません。
SCGIとは?
FastCGIのプロトコルを更に単純にした規格のようです。 nginx,web2py共にSCGIに対応していたので,使ってみることにしました。
nginxの設定を修正
ゲートウェイとしてSCGIを使用するように,設定ファイルを修正します。
$ sudo vim /etc/nginx/conf.d/web2py.conf
server {
listen 80;
server_name $hostname;
location ~* /(\w+)/static/ {
root /var/www/web2py/applications/;
}
location / {
include /etc/nginx/scgi_params;
scgi_pass 127.0.0.1:4000;
}
}
server {
listen 443;
server_name $hostname;
ssl on;
ssl_certificate /etc/nginx/ssl/rapid.crt;
ssl_certificate_key /etc/nginx/ssl/rapid.key;
keepalive_timeout 70;
location / {
include /etc/nginx/scgi_params;
scgi_param HTTPS yes;
scgi_pass 127.0.0.1:4000;
}
}
SCGIの設定
web2py付属のscgihandler.pyを動かすにはwsgitoolsが必要なので, まずはwsgitoolsをインストールします。 CentOSでは,pipコマンドがpip-pythonになっています。
$ sudo pip-python install wsgitools
次にこのサイトに掲載されている起動スクリプトをコピーして,/etc/init.d/scgihandler に置きました。
ただ,これはDebian用なので,CentOSでは動きません。 この記事の手順で,start-stop-daemonをビルドしました。
最後に起動スクリプトをサービスとして登録します。
$ sudo chmod +x /etc/init.d/scgihandler
$ sudo chkconfig —add scgihandler