2011-04-27 3 views
0

리버스 프록시로 nginx를 사용 중이며 업스트림 서버 (Windows 2003)에서 30,000 개가 넘는 TIME_WAIT 상태 포트를 찾습니다. 나는 내 서버가 여기 (http://nginx.org/pipermail/nginx/2009-April/011255.html)에서 설명한 "포트가 부족하다"는 것을 알고 있으며, TIME_WAIT를 재사용하고 더 빨리 재활용하기 위해 nginx와 업스트림 서버를 모두 설정합니다. 상류의 RPS보다 높은 1,000 일분 내에있을 때nginx 업스트림 서버 "out of ports"

[sysctl -p] 
…… 
net.ipv4.ip_local_port_range = 1024 65000 
net.ipv4.tcp_tw_recycle = 1 
net.ipv4.tcp_tw_reuse = 1 

하지만 여전히 오류를 nginx를 중단하고 "연결 서버를 상류 동안 연결 시간이 초과되었습니다"는, nginx를 오류 로그에서 찾을 수 있습니다. 업스트림이 Windows 인 경우 서버는 수초 내에 "포트를 벗어났습니다".

아이디어가 있으십니까? 대기열이있는 연결 풀? Maxim Dounin은 memcached와의 연결을 유지하는 데 유용한 모듈을 작성했지만 Web Server를 지원할 수없는 이유는 무엇입니까?

+0

아마도 이것이 http://serverfault.com에 대한 것입니까? – Matthew

답변

0

저는 nginx를 처음 사용했지만 현재까지 알고있는 것으로부터 net.ipv4.tcp_fin_timeout 값을 60 초로 줄여야합니다. 상자 밖으로 nginx 백엔드와 HTTP 연결 풀링을 지원하지 않습니다. 이 때문에 백엔드에 대한 모든 요청은 새로운 연결을 만듭니다. 포트를 다시 사용할 수 있으려면 64K 포트와 60 초 대기 후 평균 RPS는 초당 1K를 초과하지 않습니다. net.ipv4.tcp_fin_timeout 값을 nginx 서버와 백엔드 서버 모두에서 줄이거 나 백엔드 상자에 여러 개의 IP 주소를 할당하고 이러한 "동일한 서버"를 다른 서버로 처리하도록 nginx를 구성 할 수 있습니다.