nginxのビルドPythonベースのWeb環境により、

 

はじめに:

ビルドを開始する前に、のは、コーミングの下で、Webサービスのワークフローを取らせ、次の図を見て:

1、ユーザー(PC)が立ち上げた、HTTP Webサーバに要求
2、Webサーバは、ユーザがファイルを要求する静的なファイルが直接読み込まれているか否かを判定する処理する静的ファイルを取得し、Webフレームワーク(ジャンゴ)投げ要求することにより、ユーザではなく、WSGIプロトコルに戻さコード
有効でない場合、図3に示すように、有効にした場合のWebフレームワークは、Djangoのミドルウェアを起動するかどうかを確認するために、要求の変更に基づいて、ミドルウェア、次のステップに進む
4、ルーティングフレームワークWebアプリケーションルートPY要求ファイル名のURLに従って、適切なファイルへのリクエスト
送信ユーザのパラメータに応じて算出PY対応する要求ファイルを受信した後、5、(データベース中に呼び出されてもよいです)その後、計算とカスタムヘッダ情報とステータスコードの結果を返し
た後。6、返されたウェブフレームがマークされたデータの汎用識別子(ヘッダ情報)Webサーバへ
。7、WebサーバのWebサーバの一般的な識別子でマークされました(ヘッダ情報)をユーザに返す
データ8は、ユーザが返さ受信します

 

上記WSGIプロトコル、WSGIプロトコルやWebサーバに基づいてジャンゴフレームワークと対話するために見ることができますを通じて、それは何ですか?レッツは、説明するために、コードを使用します(簡単な擬似コードはWSGIプロトコルWebサーバソフトウェアとDjangoプログラムを次の記述します。):

WSGIサーバプログラム:
クラスWSGI_WEB(オブジェクト):
DEFの__init __(自己):
#1ソケット作成
self.tcp_server_socket = socket.socket(はsocket.AF_INET、socket.SOCK_STREAM)
self.tcp_server_socket.setsockoptを(socket.SOL_SOCKET、 socket.SO_REUSEADDR、1)
#2.バインド
self.tcp_server_socket.bind(( ""、7890))
#3ターンリスニングソケット
self.tcp_server_socket.listen(128)

DEF set_response_header(自己、ステータス、ヘッダ):
self.status =ステータス
self.headers = [( "サーバー"、 "WSGI_simple_web v1.0を")]
self.headers + =ヘッダ

RUN DEF(セルフ):
CLIENT_ADDR = self.tcp_server_socket.accept()、のソフトウェア以来
ENV = new_socket.recv(1024)
ボディ=ファイルアプリケーション(ENV、set_response_header)#は、Webサーバへのenvブラウザが送信されたパケットを受信で、のset_response_headerアドレスWebサーバへの1つの方法は、Djangoの目標は、生成の助けにあるWebサーバのhttpヘッダ(ないリターンの形でWebサーバへの);そこにコアの使命でもあり、ここで呼び出して、戻り値のデータを取得することですアプリケーションジャンゴ加えて、ボディ!
= + self.headers self.statusヘッダ
応答=ヘッダ+ボディ
new_socket.send(response.encode( "UTF-8"))


ジャンゴ的アプリ程序:
デフアプリケーション(ENV、start_responseを):
start_responseを( '200 OK'、[( 'Content-Typeの'、 'text / htmlの')])
復帰〔Bの"Hello World"]

 


問題:
単純なWebサーバーのパフォーマンスを使用して、一般的には、デバッグのためにのみ使用し、本番環境で貧しい提供ジャンゴ。強力なnginxのは、WSGIをサポートしていない、そしてどのようにそれを行うには?
マップ


プログラム:
nginxの間、およびサポートのpython WSGIアプリケーションプロトコルのレイヤを追加するには、Webサーバーを有効に。nginxの処理による静的ファイルの後、WSGIサーバ投げた動的なファイルは、別のWebフレームワークのWSGIサーバ処理投げました。最適なサポートWSGIプロトコルWebサーバがuWSGIです。
マップ


UWSGIサーバとで、以下のリンクnginxの詳細を構築するための方法:
1、インストールuWSGI(WSGIサポートWEBサーバ):
アンダーCentOSのpython3.6 uWSGI実装方法:
yumのインストールPCRE * -Y-GCC-develのdevelのOpenSSLのpython36- devel.x86_64の
pip3.6はインストールuwsgi
2、オープンuWSGIサービス
方法1:
uwsgi --http 192.168.31.123:80 --file教師/ wsgi.py ---静的な地図= / =静的静的
IPポートをリスニング--http
- -fileプロジェクトwsgi.pyファイルパス
--staticマップの静的ファイルのパス

注:このコマンドを実行する場合:このプロジェクトでは、ディレクトリに存在する必要があります〜

第二の方法(コンフィギュレーションファイルを使用して):
VI uwsgi.ini:
[uwsgi]
プロキシモードを逆nginxの使用時に必要)#モニタポート
HTTP = 0.0.0.0:8888

#プロジェクトのディレクトリ
のchdir =は/ opt /テスト/ TEST1 /

#のユーザー名とユーザーグループuwsgi有効
UID =ルート
GID =根を

アプリケーション#指定された項目(私はプロジェクトのディレクトリ上にステッチした後、それはwsgi.pyファイルサーバと関連するuWSGIアップ投影します、ここで「test1.wsgiを」推測)
モジュール= test1.wsgi:アプリケーションを

(nginxのローカルモードを使用する場合に必要)#靴下は、ファイルパスを指定した
ソケット= / OPT /テスト/スクリプト/ uwsgi.sock

#マスター・プロセスの有効化
=真のマスターを

#プロセスの数
= 5労働
PidFileオプション=は/ opt /テスト/スクリプト/ uwsgi.pid

ときに、サービスが停止したときに自動的に#UNIXソケットとPIDファイルを削除し
、真空が真=

#シリアライズ許容できるコンテンツ、可能であれば
雷ロック=真

#有効にスレッド
を有効-スレッド=真

#時点から設定したブレーク
切腹= 30

バッファ#
ポストバッファリング= 4096

#設定されたログ・ディレクトリ
デーモン化=は/ opt /テスト/スクリプト / uwsgi.log

#設定する頻度をロードし、一度プロジェクトコード
PY-自動再= 1

実行プロファイル(注:これは、後に浸透GETはこのステップはrootとして避けるの実行にならないよう占める何が何であるかの実装のアカウントです。):
Uwsgi --ini uwsgi.ini

卵:
再起動uWSGIプロセスは:uwsgi --reload uwsgi.pid#===>コードの直後に、あなたがそれを有効にするために処理するuWSGI再起動することができ、uWSGIプロセスを変更ロードされません。少しピットを感じていない、すべての権利は、あなたが設定ファイルPY-自動再で設定できる
クローズuWSGIプロセス:uwsgi --stop uwsgi.pid

図3は、nginxの配置
の実施例A(リバースプロキシモード):
uwsgi上流{
サーバー10.10.10.29:8888;
}

サーバー{
80聞きます。
サーバー名はlocalhost。

#charset KOI8-R。
#access_log /var/log/nginx/host.access.logメイン。

LOCATION / {
proxy_pass HTTP:// uwsgiに、リバースプロキシサーバを介して#uWSGIと関連
}
}


第二の方法(ローカルモード):
サーバー{
8080を聞く;
サーバー名はlocalhost;

#charset KOI8-R。
#access_log /var/log/nginx/host.access.logメイン。

LOCATION / {
uwsgi_params類;#のnginxの指定された通信サーバとuWSGI
30 uwsgi_connect_timeout、
UNIX uwsgi_passを:/opt/test/script/uwsgi.sock; uWSGIサーバとファイルの関連付けにより、#靴下!nginxのは、ファイルを読むために.sockますので、あなたは、SELinuxの仕事をオフにする必要があります!
}
}


この時間Djangoの管理、アクセス管理、バックグラウンドで4、静的リソースの取得に失敗します。その後、あなたは次のフォルダにアイテムを収集するために、すべての静的リソースを統一することができ、その後、(静かにnginxのから直接取得し、uWSGIへの移行)、真に静的および動的分離統一のnginxの転送に行く:
settings.pyで追加:
TATIC_ROOT = os.path.join(BASE_DIR、「static_file」)

プロジェクトのstatic_file 'ディレクトリに収集すべての静的ファイル)次のコマンドを実行します。
python3.6 manage.py collectstatic --noinput
今回は、プロジェクトディレクトリになります関係するすべての静的ファイル管理アプリを含むフォルダ「static_file」を生成

設定nginxの静的なファイルのパスを(そうでない場合は、同じuWSGI nginxのではと静的ファイルの転送にリバースプロキシサーバーのアプローチを使用することができます):
LOCATION /静的/ {
別名/ OPT /試験/ TEST1 / static_file /;
}

おすすめ

転載: www.cnblogs.com/baihualin/p/12133856.html