Przekroczenie limitu czasu połączenia z serwerem LiteSpeed przekłada się na jego obciążenie, a w konsekwencji spadek wydajności, awarie, błędy i przekroczenie limitów zasobów. Jest to więc temat na tyle istotny, że poświęciliśmy mu cały artykuł. Po zapoznaniu się z nim można zyskać wiedzę na takie tematy jak:
- Limity serwera LiteSpeed
- Sposoby obejścia limitu czasu połączenia LiteSpeed
- Wyłączenie limitu czasu połączenia w pliku .htaccess
- Czas wykonania PHP w pliku php.ini
Zapraszamy do lektury!
Serwer LiteSpeed i jego limity
Zasada jest prosta, im lepszy serwer tym strona internetowa płynniej działa. Najlepszą aktualnie opcją jest wysokowydajny serwer LiteSpeed, który jest stabilny i przekłada się na szybkie ładowanie stron. Warto zadbać również o jego higienę i wyłączyć m.in. przekroczenia limitu czasu połączenia.
Dlaczego należy uruchamiać skrypty bez limitów czasu?
Wyłączanie przekroczenia limitu czasu połączenia z serwerem LiteSpeed ma olbrzymie znaczenie dla działania strony. Dlaczego? Otóż standardowo skrypt ładuje się 30 sekund. Po tym czasie zostaje on przerwany, a jego zawartość się nie wczytuje. Rozwiązaniem jest modyfikacja tego parametru.
Globalne wyłączenie przerywania połączenia
Przerywanie zerwanego połączenia zapobiega marnowaniu zasobów systemowych oraz pozwala uniknąć ataków typu DoS. Kluczowe jest, aby serwer zapewniał nieustanną pracę PHP.
Można to zrobić za pośrednictwem globalnego wyłączenia połączenia, poprzez wybranie opcji „Nie przerywaj” w ścieżce administratora:
Konsola WebAdmin > Konfiguracja > Serwer > Ogólne > Przerwanie aplikacji zewnętrznej
A także poprzez wyłączenie zmiennej środowiskowej „noabort”. Zgodnie z regułą przepisywania lub dyrektyw SetEnv/SetEnvIf w pliku konfiguracyjnym na poziomie vhosta, Apache lub .htaccess.
Uwaga! W celu uniknięcia różnych problemów, należy pamiętać, że regułę „noabort” trzeba umieścić na górze pliku .htaccess.
Wyłączenie limitu czasu połączenia w .htaccess
Najprostszą drogą, jeśli celem jest wyłączenie limitów czasu połączenia, jest modyfikacja pliku .htaccess poprzez dodanie: RewriteRule .* – [E=noconntimeout:1]
<IfModule Litespeed>
RewriteEngine On
RewriteRule .* - [E=noconntimeout:1]
</IfModule>
lub
# # BEGIN litespeed noconntimeout noabort
<IfModule Litespeed>
RewriteEngine On
RewriteRule .* - [E=noabort:1]
</IfModule>
# # END litespeed noconntimeout noabort
Warto pamiętać: Dyrektywa SetEnv dedykowana jest do jednego konta, natomiast SetEnvIf odnosi się do wszystkich kont jednocześnie.
Czas wykonania PHP w pliku php.ini
Innym sposobem na wyłączenie limitu czasu połączenia jest zmiana czasu wykonania PHP w pliku php.ini. Mowa o zmianie max_execution_time, które określa w sekundach jak długo skrypt PHP będzie działał.
W ten sposób serwer nie jest blokowany przez źle napisany skrypt, wyzwalając LSAPI_MAX_PROCESS_TIME nim zostanie wyzwolone ustawienie właśnie max_execution_time, którego domyślne ustawienie wynosi 30 (30 sekund).
Zmiana polega na modyfikacji wartości wyrażanej w sekundach w pliku php.ini, np.:
max_execution_time=36000
Obejście limitu czasu połączenia LiteSpeed
Źle napisane skrypty należy blokować, jednak wadliwy skrypt zamyka kontakt z klientem, na co firma nie może sobie pozwolić.
Wspomniana zmienna środowiskowa „noabort” działa, nawet gdy samo połączenie będzie przerwane, ale musi pozostać otwarte.
Przekroczeniom limitów czasu połączenia można zapobiec, zwiększając w konsoli admina globalne ustawienia limitów:
WebAdmin CP > Konfiguracja > Serwer > Strojenie > Limit czasu połączenia (wyrażany w sekundach)
oraz używając zmiennej środowiskowej „noconntimeout” dla LiteSpeed. Wszystkie polecenia umieszcza się wewnątrz następującej linii kodu:
<IfModule Litespeed>
...
</IfModule>
Reguła: RewriteRule .* – [E=noconntimeout:1] oznacza, że zapis dotyczy wszystkich próśb.
W miejsce .* wprowadza się odpowiednią komendę:
1.
Jeśli chcemy, aby silnik pozostał włączony dla wp-cron.php i backupbuddy.php oraz importbuddy.php musimy wpisać w kod: (wp-cron|backupbuddy|importbuddy)\.php
RewriteRule (wp-cron|backupbuddy|importbuddy)\.php - [E=noconntimeout:1]
2.
A jeśli chcemy poprawnie połączyć to ze zmienną środowiskową „noabort” musimy wprowadzić zapis następujący:
RewriteRule (wp-cron|backupbuddy|importbuddy)\.php - [E=noabort:1, E=noconntimeout:1]
SetEnvIf Request_URI "(wp-cron|backupbuddy|importbuddy)\.php" noconntimeout
3.
Z kolei, jeśli chodzi o dyrektywy SetEnv/SetEnvIf dla wspomnianych adresów URL właściwy zapis prezentuje się w ten sposób:
SetEnvIf Request_URI "(wp-cron|backupbuddy|importbuddy)\.php" noabort noconntimeout
Wyłączenie przekroczenia limitu czasu z wykorzystaniem zmiennej LSAPI_MAX_PROCESS_TIME
Wyłączenie przekroczenia limitu czasu również może mieć miejsce z wykorzystaniem zmiennej LSAPI_MAX_PROCESS_TIME, która odpowiada za kontrolę maksymalnego czasu przetwarzania żądania i jest wyrażana w sekundach – domyślnie 3600. Ścieżka jej zmiany z poziomu administratora jest następująca:
WebAdmin > Konfiguracja > Serwer (lub Vhost) > Aplikacja zewnętrzna > aplikacja zewnętrzna > Środowiska