ngix uwsgi djangoコンビネーションステーション

3282 ワード

最近、革新的なプロジェクトを作るためにpython web開発が必要なので、djangoという全能なpython webフレームワークを研究しました.
なぜngixが必要なのでしょうか?
まず、なぜこの3つを組み合わせてステーションを建設する必要があるのか、djangoだけでは負荷均衡ができないのか、例えば静的資源を要求する必要があるのか、djangoをすべて処理する必要があり、要求を合理的に配布することはできないが、ngixはちょうどこのような問題を解決することができる(このプロジェクトも負荷均衡をあまり考慮する必要はないようだが~~しかし、強制格を高めることはいつも必要だ).ngixは、構成によってdjango処理にダイナミックリクエストを送信することができ、静的リクエストに対しては自分で処理することができ、またウェブサイト上でphpページを実行する場合、ngixは絶対に良い選択であり、phpに対するリクエストをapache処理に配布し、ngixとapacheはsocketポートを通じて通信し、クライアント処理後の結果に戻る.
そしてなぜuwsgiが必要なのでしょうか?
WSGIはWebサーバゲートウェイインタフェースです.これは、nginxなどのWebサーバとuWSDiサーバなどのアプリケーションサーバとの通信の仕様です.そしてuwsgiはuwsgiとWSGIの2つのプロトコルを実現したWebサーバである.簡単に言えばuwsgiを運用してuwsgiからdjangoを起動し、ngixがポートを通じてuwsgiと通信することを実現することができます.この過程で、gjangoはwsgiサーバーの機能を実現し、ngixはwsgiクライアントの機能を実現しました.ただwebの中で、ngixはまたサーバを演じます(コンピュータ内のソフトウェア通信の多くはクライアントサーバモードです.ファイルリソースがサービスであり、アプリケーションが対応するプロトコルを実現してこのサービスを呼び出します).これによりuwsgiのngixとdjangoでの中継が実現される.
なぜngixにdjangoと直接通信させないのですか?
uWSDIは、wsgiプロトコルもfcgiプロトコルも使わず、uwsgiのプロトコルを独自に作成した.このプロトコルはfcgiプロトコルの約10倍ほど速いという.uWSDIの主な特徴は以下の通りである.
  • の超高速性能.
  • 低メモリ消費量(apache 2のmod_wsgiの半分程度と実測).
  • マルチapp管理.
  • の詳細なログ機能(appのパフォーマンスとボトルネックを分析するために使用できます).
  • 高さカスタマイズ可能(メモリサイズ制限、サービス一定回数後の再起動など).

  • この3つの間の原理は以下の通りです.
    the web client the web server(nginx) the socket uwsgi Django
    導入の開始
    ngix sudo apt-get install ngixのインストール
    私のマシンにはapacheがあるので、ngixのリスニングポートを8080に変更する必要があります.
    server {
        listen 8080 default_server;
        listen [::]:8080 default_server ipv6only=on;
    
        root /var/ngix;  #      /var/ngix
        index index.html index.htm;
    }
    

    djangoのインストール
    pythonが持参したパッケージマネージャeasy_インストールeasy_install djangoは最新バージョンを自動的にインストールします
    uwsgiのインストール
    apt-get install python-dev#これをインストールしないと、次のインストールが失敗する可能性がありますpip install uwsgi
    apt-getインストールの場合は
    sudo apt-get install uwsgi-plugin-python
    ツールがインストールされたらプロジェクトの構成を開始できます.私が使っている開発環境はpycharmで、djangoプロジェクトを自動的に生成することができます.djangoを実行するadminでなければ.py生成対応するプロジェクトファイルの下に私のプロジェクトの構造があります.└── myproject ├── app │ ├── admin.py │ ├── init.py │ ├── migrations │ │ └── init.py │ ├── models.py │ ├── tests.py │ └── views.py ├── db.sqlite3 ├── manage.py ├── myproject │ ├── django.xml │ ├── init.py │ ├── init.pyc │ ├── settings.py │ ├── settings.pyc │ ├── urls.py │ ├── urls.pyc │ ├── wsgi.py │ └── wsgi.pyc ├── templates
    django.xmlファイルの内容は次のとおりです.
    
        127.0.0.1:8630
        /var/ngix/myproject/myproject
        ..
        wsgi
    
    

    ここで注意しなければならないのはwsgiモジュールで、ネット上の多くは間違っていて、直接自動で生成すればいいです.SOcketとngixで通信します.ポート番号は自機の8630ポートで、ngixのプロファイルに追加する必要があります.
    location / {
            include uwsgi_params;
            uwsgi_pass 127.0.0.1:8630;
    }
    

    uwsgiはngixが持参したモジュールでngixサービスを再起動し、uwsgiサービスを起動します.
    $ uwsgi -x django.xml --plugin python
    djangoで必要です.xmlが存在するディレクトリの実行
    最后にブラウザで127.0.0.1:8080を入力するとdjangoのデバッグページが表示されます~~
    学んだ他のことをまとめます:/etc/dpkg/info/以下の対応するインストールファイルを削除して、aptサブプロセスの起動エラーの問題を解決することができます.削除したらautoremoveが必要です
    資料共有:wsgi概念uwsgi概念nginxとuWSDiに基づいてUbuntuにDjangoを配置する方法supervisor管理unavailable-modifier-requested-0解決方法uwsgiマニュアルuwsgi配置djangoよくある問題まとめdjango中国語チュートリアルを見るか、英語チュートリアルを見ることをお勧めします.