2016-12-03 59 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 -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

正如你所看到的,有兩個完全獨立的TCP連接。第一個由uWSGI(包#10 - [FIN, ACK])關閉。

我在做什麼錯?爲什麼uWSGI不尊重--http-keepalive標誌而不是立即關閉連接?

回答

0

我終於可以通過從--http-socket切換到簡單--http來使keepalive工作。據uWSGI文檔:

如果你的Web服務器不支持uwsgi協議,但是能講上游HTTP代理,或者如果您使用的是像Webfaction或Heroku的服務來託管您的應用程序,你可以使用http-socket。如果您打算僅通過uWSGI將應用展示給世界,請使用http選項,因爲路由器/代理/負載均衡器將成爲您的屏蔽。

在我的特殊情況下,還需要加載http插件。

相關問題