Jak dostosować nginx keepalive_timeout?

12

Używam nginx wraz z php-fpm do serwera zajętej witryny opartej na mysql. Obecnie używam keepalive_timeout = 5, ale nie mam jasnego pojęcia, jak optymalnie go dostosować. Więc doceń swoje wskazówki.

alfish
źródło

Odpowiedzi:

10

Co musisz zrobić, żeby to zrobić, a raczej: czy widzisz jakieś problemy z ustawieniem tego, co robisz?

Nie ma dobrej, uniwersalnej odpowiedzi; jeśli większość przeglądarek klienckich jest w stanie załadować wszystkie zasoby na stronie w ciągu 5 sekund, to 5 sekund jest w porządku, ale to całkowicie zależy od potrzeb twojej aplikacji - jeśli twój serwer nginx służył na przykład jako odwrotne proxy dla Exchange ActiveSync, na przykład, chciałbyś, żeby był podkręcony do pół godziny.

Shane Madden
źródło
Cóż, staram się zminimalizować obciążenie serwera (które jest dość wysokie w czasach kompletacji) i myślę, że optymalizacja keepalive_timeout może częściowo przyczynić się do osiągnięcia tego celu. Poza tym to tylko zdrowa ciekawość :)
alfish 16.11.11
1
Jasne - a więc „tak nisko, jak to możliwe bez zrzucania większości klientów, zanim załadują stronę” - więc jeśli strony ładują się w mniej niż sekundę dla większości klientów, to 1 sekunda będzie w porządku. Ale jeśli limit czasu nie jest znacznie, dużo dłuższy niż 5 sekund, jest mało prawdopodobne, że jest to główna przyczyna obciążenia serwera.
Shane Madden
To trudny punkt. Jak mogę określić czas wczytywania strony, biorąc pod uwagę różnicę w czasie ładowania stron (niektóre są cięższe od innych), szybkości połączeń odwiedzającego itp.
Alfish
Po prostu to zapisz. Kilka sekund w ten czy inny sposób raczej nie spowoduje znaczącej różnicy w obciążeniu, więc nie krępuj się oszacować wysokiego - ale z drugiej strony nowa kompilacja połączenia TCP (nawet z uzgadnianiem SSL, jeśli dotyczy) dla klienta wolno ładującego nie zrobi dużej różnicy w ich ogólnej prędkości ładowania.
Shane Madden
1
@ShaneMadden, że 5 sekund nie jest okresem żywotności połączenia, ale jedynie limitem czasu, w którym serwer czeka na kolejne żądanie keepalive_requests. Więc nie jest ważne, ile czasu zajmuje załadowanie pełnej strony, tylko HTML, aż przeglądarka zacznie pobierać obrazy / css ... BTW max. czas połączenia jest otwarty jest prawiekeepalive_timeout*keepalive_requests
Marki555