2016-12-03 6 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 옵션을 통과 컬 여러 요청을 발행에도 불구하고 다음과 같은 출력 결과 :

* Connection 0 seems to be dead! 

이 Wireshark는 함께 확인되었다 :

특별한 관심의

# 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 
... 

라인입니다 enter image description here

두 가지 완전히 다른 TCP 연결이 있습니다. 첫 번째 항목은 uWSGI (패킷 # 10 - [FIN, ACK])에 의해 닫힙니다.

내가 뭘 잘못하고 있니? uWSGI가 즉시 연결을 닫는 대신 --http-keepalive 플래그를 사용하지 않는 이유는 무엇입니까?

답변

0

--http-socket에서 간단히 --http으로 전환하여 마지막으로 Keepalive를 작동시킬 수있었습니다. uWSGI의 문서에 따르면 웹 서버가 uwsgi 프로토콜을 지원하지만 HTTP 프록시를 상류 말을 할 수없는 경우 응용 프로그램을 호스팅 할 수 Webfaction 나에게 Heroku 같은 서비스를 사용하는 경우

, 또는 당신이 사용할 수있는 http-socket. uWSGI로만 앱을 세계에 공개하려는 경우 라우터/프록시 /로드 밸런서가 방패가되므로 http 옵션을 사용하십시오.

내 특별한 경우에는 http 플러그인을로드해야합니다.