ホームページ  >  記事  >  バックエンド開発  >  nginx+グニコーン+ジャンゴ

nginx+グニコーン+ジャンゴ

WBOY
WBOYオリジナル
2016-08-08 09:30:071581ブラウズ

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">官方地址:http://gunicorn.org/</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">                  http://docs.gunicorn.org/en/19.2/</span>

参考アドレス:http://www.cnblogs.com/ArtsCrafts/p/gunicorn.html

WSGI サーバーとは:

たとえば、Flask、webpy、Django、CherryPy にはすべて WSGI サーバーが付属しています。もちろん、組み込みの Web サーバーはテスト用です。オンラインで公開する場合は、高性能の wsgi サーバーを使用するか、nginx と組み合わせて uwsgi を実行します。


2. gunicorn をインストールします

~$ sudo pip install gunicorn

Gunicorn に非同期ワーカーをサポートさせたい場合は、3 つの Python パッケージをインストールする必要があります

~$ sudo pip install greenlet

~$ sudo pip install eventlet

~$ sudo pip install gevent

注: greenlet のインストールが失敗した場合は、Python ヘッダーをインストールする必要があります

~$ sudo apt-get install python-dev

gunicorn のバージョンを確認できます

~$ gunicorn - -Versionn Gunicorn (バージョン 19.1.1)


II、Gunicorn コマンドは、Gunicorn のインストールが成功した後、次の 3 つの命令を使用して、Gunicorn 実行 WSGI アプリケーションまたは WSGI フレームワークを開始します。

1. gunicorn

Gunicorn サーバーの最も基本的なコマンド。最も基本的な wsgi アプリケーションを実行するために直接使用されます。

使用法: gunicorn [OPTIONS] APP_MODULE

OPTIONS オプションのパラメーター gunicorn を実行するための構成オプション (後で説明します)。

APP_MODULE は、$(MODULE_NAME):$(VARIABLE_NAME) の形式で wsgi アプリケーション ファイルを指定します。このうち module_name は実行する wsgi アプリケーションファイルを指定するために使用されますが、これは完全な装飾名です。

たとえば、現在のディレクトリ myapp ディレクトリに Python パッケージ gunicorn_app があり、gunicorn_app パッケージの下に wsgi アプリケーション ファイル test.py があります。

次に、 module_name を gunicorn_app.test として直接記述することができます。 module_nameファイルで呼び出されるオブジェクトの名前(関数と呼ばれるWSGI)を表します。

上記の例によれば、現在のディレクトリは /home/workspace/myapp で、myapp にはパッケージ gunicorn_app があり、test.py コードは次のとおりです:

def app(environ, start_response):
    """Simplest possible application object"""
    data = 'Hello, World!\n'
    status = '200 OK'
    response_headers = [
        ('Content-type','text/plain'),
        ('Content-Length', str(len(data)))
    ]
    start_response(status, response_headers)
    return iter([data])
テストでアプリを実行します。 .py

gunicorn gunicorn_app.test: app

2. gunicorn_django


gunicorn_django コマンドは、Django アプリを Gunicorn サーバーにデプロイするために使用されます。

原理は gunicorn と同じですが、gunicorn_django が Django により適するように特別に処理されている点が異なります。

基本的な使用法: gunicorn_django [OPTIONS] [SETTINGS_PATH]

OPTIONS については前に説明しました。

SETTINGS_PATH django アプリの settings.py ファイルが配置されているディレクトリ。 書かれていない場合は、デフォルトで現在のディレクトリから検索されます。ただし、この使用法は、Django 1.4 以降のバージョンの django に適用されます。gunicorn コマンドを使用することを強くお勧めします。 。 N u 3. Gunicorn_Paster

このコマンドは、公式文書の調査に興味があります。

3. Gunicorn の設定


Gunicorn は 3 つの異なる場所から設定情報を読み取ります。

まず、フレームワークによって定義された構成情報から読み取ります。現在、Paster フレームワークでのみ有効です。

2 番目: コマンド ラインで定義すると、コマンド ラインで定義された構成情報は、フレームワークで定義された同じパラメーター名の値を上書きします。

3 番目の場所: 構成ファイルを作成し、そのファイルに構成情報を書き込みます (これは Python ソース ファイルなので、Python コードを記述するのと同じです)。

gunicorn -h を介してすべてのコマンド構成情報を表示します

公式ドキュメントを介してさらに詳細な情報を表示することもできます: http://docs.gunicorn.org/en/19.2/

上記の myapp の例に基づく

gunicorn --workers=4 --bind=127.0.0.1:8000 myapp.gunicorn_app.test:app

上記のコマンドは 4 つのワーカーを開始し、127.0.0.1:8000 にバインドします

または、構成ファイルを次のように使用することもできますこれは config.py 設定ファイルのソース コードです:

import multiprocessing

bind = "127.0.0.1:8001"
workers = multiprocessing.cpu_count() * 2 + 1

gunicorn --config=config.py myapp.gunicorn_app.test:app

4. gunicorn フレームワークの紹介

     Gunicorn是基于pre-fork模型的。也就意味着有一个中心管理进程(master process)用来管理worker进程集合。Master从不知道任何关于客户端的信息。所有请求

和响应处理都是由worker进程来处理的。

     Master(管理者)

     主程序是一个简单的循环,监听各种信号以及相应的响应进程。master管理着正在运行的worker集合。

     Worker类型

     1. Sync Workers

         最基本的也是默认的worker type。

         一个同步的worker class,同一时间只能控制一个request请求。

     2. Async Workers

        异步workers的使用是基于Greenlets(通过Eventlet和Gevent)。所以使用此worker type之前一定要安装好python对应的包。

        Greenlets是python多线程协作的一个实现。

     3. Tornado Workers  

         这是一个Tornado worker class。

     

五、Gunicorn部署

       使用Gunicorn必须基于一个代理服务器。

       1. Nginx Configuration

           虽然有很多HTTP代理可以使用,但是我们还是强烈推荐Nginx。如果你选择了其他代理服务器,你需要确认,当你使用默认的Gunicorn workers时,它能够buffers slow clients。没有buffering Gunicorn将很容易受 denial of service attacks的影响。也可使用 slowloris 去核实你的代理服务器是否工作良好。

         如下是一个nginx配置文件实例(假设127.0.0.1:8888端口已经被gunicorn绑定监听):

server {
        #listen   80; ## listen for ipv4; this line is default and implied
        #listen   [::]:80 default ipv6only=on; ## listen for ipv6
        listen 80;
        client_max_body_size 4G;
        server_name www.android_stat.com

        keepalive_timeout 5;



        location / {
                try_files $uri @proxy_to_app;
        }

        location @proxy_to_app {
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                proxy_redirect off;
                proxy_pass http://127.0.0.1:8888;
        }
六、监控Gunicorn

       注意:要监控Gunicorn的时候,Gunicorn不能启动daemon模式,如果使用daemon模式会fork出一个进程,这样监控工具就没法监控这个进程。

       我在这只介绍supervisor

      1. Supervisor

          Supervisor可以用来监控进程,下面是一个简单的supervisor的配置文件:

[program:gunicorn]
command=/path/to/gunicorn main:application -c /path/to/gunicorn.conf.py
directory=/path/to/project
user=nobody
autostart=true
autorestart=true
redirect_stderr=true

       

    

以上就介绍了nginx+gunicorn+django,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。