나는 lighttpd를 내 사용자 정의 HTTP 기반 응용 프로그램 서버에 대한 프런트 엔드 프록시로 사용하고 있습니다. 시간 초과 및 KeepAlive 설정이 큰 다수(약 5000개)의 동시 http 연결에 대해 lighttpd를 구성해야 합니다. 각 연결은 대부분 유휴 상태로 유지됩니다. HTTP 기반 채팅 서버를 상상해보십시오.
내 HTTP 서버는 http-push Comet과 유사한 상호 작용을 사용하고 있습니다(Wikipedia 참조).http://en.wikipedia.org/wiki/Comet_(프로그래밍)). 특히 AJAX 클라이언트는 서버가 즉시 응답하지 않는 GET 요청을 보냅니다. 대신, 서버는 클라이언트에게 새로운 상태에 대한 메시지를 보내야 할 때까지 HTTPconnection이 열린 상태로 기다린 다음 GET 요청에 대한 HTTP 응답을 보냅니다. 클라이언트는 응답을 처리하고 또 다른 GET 요청을 보내는데, 다시 한번 서버가 즉시 응답하지 않습니다.
그러나 질문의 목적상 요청의 정확한 성격이 반드시 필요한 것은 아닙니다. 필요한 것은 본질적으로 한 번에 많은 수의 저대역폭 동시 HTTP 프록시 연결을 허용하는 lighttpd 구성입니다.
lighttpd 1.4.19를 어떻게 구성합니까? 우분투 8.04에서 실행 중입니다. lighttpd는 내 앱 서버와 django 백엔드에 대한 요청을 프록시합니다.
간단히
server.max-keep-alive-requests = 5000
하루를 설정하고 부르나요?아니면 더 큰 숫자를 사용해야 할까요
server.max-fds = 5000
?어떤 메모리 고려 사항이 있습니까?
어쩌면 lighttpd 프록시 없이 사용할 수 있도록 앱 서버를 강화해야 할 수도 있습니다(신뢰할 수 있는 프록시 없이 직접 월드 페이싱하는 프로그래밍에 대해서는 확신이 없습니다).
lighttpd는 10,000개의 동시 연결을 처리할 수 있다고 주장됩니다. 대부분이 유휴 상태인 해당 숫자의 절반을 수행하도록 어떻게 구성합니까?
답변1
각 프록시 연결은 최소 두 개의 FD(클라이언트에 하나, 프록시 중인 서버에 하나)를 사용한다는 점을 기억하십시오. 또한 오버헤드에 대해 ~5-50FD를 고려하십시오.
나머지 질문에 대해서는 귀하에게 가장 적합한 설정을 찾으려면 귀하의 환경에서 애플리케이션을 테스트해야 한다고 말하고 싶습니다.
답변2
1.4.x의 프록시는 1.4.x의 Lighttpd <--> 백엔드 통신 비트를 I/O 다중화하지 않기 때문에 이 작업을 제대로 수행하려면 Lighttpd-1.5.x(SVN의)가 필요합니다.
내가 아는 한, Lighttpd-1.5.x가 이 작업을 수행할 수 있는 유일한 역방향 프록시라는 것을 알았습니다.
mod_proxy_core
and 를 사용하고 and 를 mod_proxy_backend_http
사용 하려고 합니다 ("server." 대신 "proxy-core." 접두사가 어떻게 붙는지 참고하세요).proxy-core.max-keep-alive-requests
proxy-core.max-pool-size
http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModProxyCore
나는 이것을 20,000개의 동시 연결 유지 연결(Lighttpd <-> 백엔드)로 테스트했으며 잘 작동합니다.