Optymalizacja wydajności Apache2

Wiele osób używa Apache2 jako serwera WWW. Jednak niewiele osób myśli o optymalizacji jego wydajności, co wprost proporcjonalnie wpływa na szybkość ładowania stron serwisu, szybkość przetwarzania skryptów (w szczególności php), a także wzrost obciążenia procesora i wzrost ilości wykorzystywanej pamięci RAM.

Zatem poniższa instrukcja powinna pomóc początkującym (i nie tylko) użytkownikom.
Wszystkie poniższe przykłady zostały użyte na Raspberry PI 3, Debianie 9, Apache 2.4.38, PHP 7.3.

Więc zacznijmy.

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

Pierwsza metoda polega po prostu na wyłączeniu modułów, których nie używasz:

Listę aktualnie używanych modułów można wyświetlić komendą:

apache2ctl -M

Aby wyłączyć moduł użyj komendy:

a2dismod *название модуля*

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

a2enmod *название модуля*

Należy pamiętać, że podczas korzystania a2dismod, nazwa modułu musi być zapisana bez samego słowa moduł.

Na przykład, jeśli znajdujesz się w wynikach polecenia apache2ctl-M widział moduł_proxy, a następnie, aby go wyłączyć, musisz użyć polecenia - proxy a2dismod

Moduły najbardziej obciążające system (z własnego doświadczenia) to:

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

Zatem w przypadkach, gdy nie potrzebujesz tych modułów, zalecam wyłączenie tych modułów.

Ponadto po wyłączeniu dowolnego modułu polecam użyć polecenia - Test konfiguracji apache2ctl, który sprawdzi konfigurację używanych witryn i jeśli któryś z wyłączonych modułów był dla nich niezbędny, wygeneruje błąd.

2. Zmiana MPM (modułu wieloprocesorowego) i użycie php-fpm

Domyślnie po instalacji Apache2 korzysta z MPM Prefork (1 wątek na 1 połączenie), co znacznie zmniejsza wydajność, ale jednocześnie poprawia stabilność i bezpieczeństwo.

Aby jednak zoptymalizować wydajność, polecam użycie MPM Worker, który pozwala na użycie wielu wątków na połączenie.

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

a2dismod mpm_prefork  //Отключаем prefork
a2dismod php7.3  //Отключаем модуль php, который зависит от prefork
a2enmod mpm_worker  //Включаем worker

Jednak podczas korzystania z Workera możesz napotkać problem, ponieważ... Moduł php7.3 zależy od modułu Prefork.

Aby rozwiązać ten problem zainstalujmy moduł php7.3-fpm, który będzie służył do uruchamiania skryptów PHP:

apt-get update && apt-get install php7.3-fpm  //Устанавливаем
systemctl enable php7.3-fpm && systemctl start php7.3-fpm  //Добавляем в автозагрузку и запускаем
a2enmod php7.3-fpm && a2enconf php7.3-fpm.conf  //Включаем модуль и конфиг для него

Warto zauważyć, że użycie php-fpm zmniejszy także ilość pamięci RAM wykorzystywanej przez proces Apache2 i nieznacznie przyspieszy przetwarzanie skryptów PHP.

3. Wniosek

Dzięki tak prostym działaniom udało nam się zoptymalizować wydajność i zmniejszyć obciążenie maszyny (w tym przypadku RPI3).

Oczywiście istnieją setki innych opcji optymalizacji, jak włączenie kompresji (co jest naprawdę przydatne, ale większość jest już domyślnie włączona), zmiana ustawień MPM (pliki konfiguracyjne), wyłączenie funkcji HostnameLookups itp., ale w tym artykule próbowałem refleksji Oto punkty, które mi najbardziej pomogły i mam nadzieję, że pomogą innym.

Źródło: www.habr.com

Dodaj komentarz