Optymalizacja wydajności apache2

Wielu użytkowników korzysta z apache2 jako serwera WWW. Niewiele osób jednak myśli o optymalizacji jego wydajności, co ma bezpośredni wpływ na prędkość ładowania stron, szybkość przetwarzania skryptów (w szczególności PHP) oraz wzrost obciążenia CPU i zwiększenie wykorzystania RAM.

Następnie, poniższy poradnik powinien pomóc początkującym (i nie tylko) użytkownikom.
Wszystkie poniższe przykłady były używane na Raspberry PI 3, Debian 9, Apache 2.4.38, PHP 7.3.

Zacznijmy zatem.

1. Wyłączenie nieużywanych modułów

Pierwszą metodą jest proste wyłączenie modułów, których nie używasz:

Listę aktualnie używanych modułów można zobaczyć poleceniem:

apache2ctl -M

Aby wyłączyć moduł, używamy polecenia:

a2dismod *nazwa modułu*

Odpowiednio, aby włączyć moduł, używamy polecenia:

a2enmod *nazwa modułu*

Zauważ, że przy użyciu a2dismod, nazwę modułu należy pisać bez słowa 'moduł'.

Na przykład, jeśli w wyjściu polecenia apache2ctl -M widzieliście proxy_module, to aby go wyłączyć, należy użyć polecenia — a2dismod proxy

Najbardziej obciążającymi system modułami (zgodnie z osobistym doświadczeniem) są:

  • PHP, Ruby, Perl oraz inne moduły dla różnych języków skryptowych
  • SSL
  • Rewrite
  • CGI

Dlatego w przypadkach, kiedy te moduły są niepotrzebne, polecam ich wyłączenie.

Po wyłączeniu jakiegokolwiek modułu, zalecam również użycie polecenia — apache2ctl configtest, które sprawdzi konfigurację używanych witryn oraz jeśli którykolwiek z wyłączonych modułów był dla nich niezbędny, zgłosi błąd.

2. Zmiana MPM (Multi-Processing Module) i użycie php-fpm

Domyślnie, po instalacji, apache2 używa MPM Prefork (1 wątek na 1 połączenie), co znacząco obniża wydajność, ale poprawia stabilność i bezpieczeństwo.

Jednak dla optymalizacji wydajności zalecam użycie MPM Worker, który pozwala na wykorzystanie kilku wątków na jedno połączenie.

Aby go włączyć, używamy następujących poleceń:

a2dismod mpm_prefork  // Wyłączamy prefork
a2dismod php7.3  // Wyłączamy moduł php, który zależy od prefork
a2enmod mpm_worker  // Włączamy worker

Jednak przy używaniu Worker możesz napotkać problemy, ponieważ moduł php7.3 zależy od modułu Prefork.

Aby rozwiązać ten problem, zainstalujemy moduł php7.3-fpm, który będzie używany do przetwarzania skryptów php:

apt-get update && apt-get install php7.3-fpm  //Instalujemy
systemctl enable php7.3-fpm && systemctl start php7.3-fpm  //Dodajemy do autostartu i uruchamiamy
a2enmod php7.3-fpm && a2enconf php7.3-fpm.conf  //Włączamy moduł i jego konfigurację

Warto zauważyć, że użycie php-fpm również zmniejszy ilość pamięci RAM używanej przez proces apache2 i nieco przyspieszy przetwarzanie skryptów php.

3. Podsumowanie

W ten sposób, dzięki tym prostym działaniom, udało nam się zoptymalizować wydajność i zmniejszyć obciążenie urządzenia (w tym przypadku RPI3).

Oczywiście, istnieje setki innych możliwości optymalizacji, takich jak włączenie kompresji (co jest naprawdę przydatne, ale w większości już włączone domyślnie), zmiana parametrów (plików konfiguracyjnych) MPM, wyłączenie HostnameLookups itd., ale w tym artykule starałem się odzwierciedlić te punkty, które najbardziej mi pomogły i mam nadzieję, że pomogą innym.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster