Symfoware

Symfowareについての考察blog

Python WSGI Server「bjoern」とNginxの連携

WSGIサーバー「bjoern」をFreeBSD 10.0で動かしてみました。
高速軽量なPython WSGI Server「bjoern」でBottleフレームワークを動かす

Nginxと連携してみます。



プログラムの修正とアダプター



過去の記憶を呼び覚まします。
Apache + mod_wsgiでBottleフレームワークのアプリケーションを動かす


本体の「sample.py」をちょっと修正しました。
スクリプトが直接実行されていない場合は、変数applicationに
bottle.default_app()を設定します。


・sample.py


  1. # -*- coding:utf-8 -*-
  2. import bottle
  3. @bottle.route('/hello/:name')
  4. def index(name='World'):
  5.     return bottle.template('<b>Hello {{name}}</b>!', name=name)
  6. if __name__ == '__main__':
  7.     bottle.run(host='0.0.0.0', port=8080)
  8. else:
  9.     application = bottle.default_app()







bjoernで起動するためのスクリプトを用意しました。

・adapter.wsgi


  1. # -*- coding:utf-8 -*-
  2. import sys, os
  3. dirpath = os.path.dirname(os.path.abspath(__file__))
  4. sys.path.append(dirpath)
  5. os.chdir(dirpath)
  6. import bjoern
  7. import sample
  8. # Bind to TCP host/port pair:
  9. bjoern.run(sample.application, host='127.0.0.1', port=8080)





バックグラウンドで実行します。


# python adapter.wsgi & echo $! > bjoern.pid




停止はkillコマンドで。


# kill -9 `cat bjoern.pid`








nginxの設定



nginxの設定ファイルを変更します。


# vi /usr/local/etc/nginx/nginx.conf




とりあえずの動作を確認したかったので、全てのリクエストをbjoernに流します。



        location / {
            #root /usr/local/www/nginx;
            #index index.html index.htm;
            proxy_pass http://localhost:8080;
        }





設定が終わったらリロード。


# /usr/local/etc/rc.d/nginx reload





ブラウザでhttp://[サーバーIP]/hello/testにアクセスすると、
ちゃんとBottleのアプリケーションから応答がありました。

386_01.png







Unixソケット



bjoern起動時、Unixソケットを指定することができます。
https://github.com/jonashaag/bjoern


Unixソケット使用時の起動スクリプトはこんな感じ。


  1. # -*- coding:utf-8 -*-
  2. import sys, os
  3. dirpath = os.path.dirname(os.path.abspath(__file__))
  4. sys.path.append(dirpath)
  5. os.chdir(dirpath)
  6. import bjoern
  7. import sample
  8. import pwd
  9. # Unixソケットを使ってみる
  10. user_name = 'www'
  11. socket_name = '/tmp/bjoern.sock'
  12. # ユーザーを変更
  13. user = pwd.getpwnam(user_name)
  14. os.seteuid(user.pw_uid)
  15. # サーバー起動
  16. bjoern.run(sample.application, 'unix:' + socket_name)






Nginxの設定ファイルは以下のようになりました。


    upstream backend {
        server unix:/tmp/bjoern.sock;
    }

    server {
        listen     80;
        server_name localhost;

        #charset koi8-r;

        #access_log logs/host.access.log main;
        location / {
            #root /usr/local/www/nginx;
            #index index.html index.htm;
            #proxy_pass http://localhost:8080;
            proxy_pass http://backend;
        }






【参考URL】

Python: finding uid/gid for a given username/groupname (for os.chown)
関連記事

テーマ:サーバ - ジャンル:コンピュータ

  1. 2014/03/25(火) 23:00:50|
  2. Python
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Python Bottleフレームワークをサブディレクトリで動かす | ホーム | 高速軽量なPython WSGI Server「bjoern」でBottleフレームワークを動かす>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1369-f3ad66bd
この記事にトラックバックする(FC2ブログユーザー)