FIELD NOTES: 書を持って街へ出よう

合同会社フィールドワークス プログラマ兼代表のブログ

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

参照サイト