2016-12-03 13 views
3

私は、次のコマンドを使用してubuntu:16.04を実行しているドッカーコンテナにuWSGIをインストール:uWSGIが "--http-keepalive"フラグを尊重しないのはなぜですか?

apt-get update 
apt-get install -y build-essential python-dev python-pip 
pip install uwsgi 

私は、単一の静的ファイル作成:

cd /root 
mkdir static 
dd if=/dev/zero bs=1 count=1024 of=static/data 

を...そして最後に、次のコマンドでuWSGIを開始しました:

uwsgi \ 
    --buffer-size 32768 \ 
    --http-socket 0.0.0.0:80 \ 
    --processes 4 \ 
    --http-timeout 60 \ 
    --http-keepalive \ 
    --static-map2=/static=./ 

私は何の問題もなく、静的なファイルにアクセスすることができました。しかし、--http-keepaliveオプションを渡すにもかかわらず、cURLを持つ複数の要求を発行すると、次の出力が得られた:特に興味深いの

# curl -v 'http://myserver/static/data' -o /dev/null 'http://myserver/static/data' -o /dev/null 
* Trying 192.168.1.101... 
... 
> GET /static/data HTTP/1.1 
> Host: 192.168.1.101:8100 
> User-Agent: curl/7.47.0 
> Accept: */* 
> 
< HTTP/1.1 200 OK 
< Content-Length: 1024 
< Last-Modified: Sat, 03 Dec 2016 22:06:49 GMT 
< 
{ [1024 bytes data] 
100 1024 100 1024 0  0 577k  0 --:--:-- --:--:-- --:--:-- 1000k 
* Connection #0 to host 192.168.1.101 left intact 
* Found bundle for host 192.168.1.101: 0x563fbc855630 [can pipeline] 
* Connection 0 seems to be dead! 
* Closing connection 0 
... 

ラインです:

* Connection 0 seems to be dead! 

これはWireSharkので確認した

enter image description here

ご覧のとおり、2つの完全に別々のTCP接続があります。最初のものはuWSGIによって閉じられます(パケット#10 - [FIN, ACK])。

私は間違っていますか? uWSGIがすぐに接続を終了する代わりに--http-keepaliveフラグを受け入れないのはなぜですか?

答えて

0

最後に、--http-socketから--httpに切り替えることで、キープアライブを動作させることができました。 uWSGIのドキュメントによると:

Webサーバーがuwsgiプロトコルをサポートしていますが、HTTPプロキシを上流側に話すことができている、またはあなたがあなたのアプリケーションをホストするWebfactionまたはHerokuのようなサービスを使用している場合は、あなたが使用することができていない場合http-socket。 uWSGIだけであなたのアプリを世界に公開する予定の場合は、代わりにhttpオプションを使用してください。ルータ/プロキシ/ロードバランサがあなたの盾になります。

具体的には、httpプラグインを読み込む必要がありました。

関連する問題