Poniżej przedstawię Ci sposób, w którym zamienimy standardowy tryb obsługi połączeń dla apache. Dokonamy zmiany z trybu obsługi każdego połączenia per proces "mpm_prefork_module", na znacznie wydajniejszy "mpm_event_module". Działa on z użyciem tworzenia procesów dla każdego połączenia. Same wątki są grupowane w jeden lub więcej procesów. Spowoduje to zwiększenie wydajności obsługi połączeń jak i zmniejszy zapotrzebowanie na pamięć ram. Dodatkowo pozwoli to zwiększyć szanse przetrwania ataku DDOS.
Pragnę tylko wspomnieć że samo przełączenie wymagać będzie, również zamiany konfiguracji obsługi naszych skryptów php z php-cli na php-fpm.
Poniższy przykład został utworzony z użyciem Oracle Linux 9.4.
Procedura:
Zamiana trybu mpm_prefork na mpm_event:
Na początku w pliku /etc/httpd/conf.modules.d00-mpm.conf musimy przełączyć ustawienia naszego serwera www z:
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_event_module modules/mod_mpm_event.so
na:
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
LoadModule mpm_event_module modules/mod_mpm_event.so
Przeniesienie konfiguracji sesji:
Teraz wszelką naszą konfigurację php np. dotyczącą sposobu przechowywania sesji (która znajduje się w naszych virtualhostach), należy zakomentować.
# php_admin_value session.save_path db1:11211,db2:11211
# php_admin_value session.save_handler memcached
Po tym należy przenieść ją do samej usługi php-fpm. W tym przypadku do pliku /etc/php-fpm.d/www.conf:
php_value[session.save_handler] = memcached
php_value[session.save_path] = db1:11211,db2:11211
Zamiana php-cli na php-fpm:
Na początku doinstalujemy wymagany moduł:
yum install php-fpm
po czym w pliku /etc/httpd/conf.modules.d/15-php.conf dodajemy obsługę php. Zrobimy to po przez tcp/ip aby nasze strony były interpretowane.
<Proxy "fcgi://127.0.0.1:9000" timeout=30>
ProxySet disablereuse=on
</Proxy>
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
*Upewnij się że korzystasz z php-fpm serwowanego przez TCP/IP, a nie przez socket uniksowy. Możesz to zrobić sprawdzając co znajduje się pod kluczem "listen" w pliku "/etc/php-fpm.d/www.conf".
Zwiększenie wydajności:
Możemy teraz ręcznie zarządzać limitami naszych zasobów. Poniższa konfiguracja została stworzona pod serwer z 8x cpu i 24GB RAM.
<IfModule mpm_event_module>
ServerLimit 32
StartServers 4
MinSpareThreads 64
MaxSpareThreads 128
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 800
MaxConnectionsPerChild 1000
</IfModule>
Po więcej zapraszam Cię do tej strony.
Restart usług:
Po wszystkim restartujemy nasze usługi:
systemctl restart php-fpm
systemctl restart httpd
Weryfikacja:
Po wszystkim należy sprawdzić czy korzystamy z FastCgi. Możemy to zrobić tworząc plik (np. info.php) w katalogu public naszego serwera.
<?php
phpinfo();
?>
Po wejściu przez przeglądarkę na powyższą stronę, powinniśmy otrzymać:
Server API | FPM/FastCGI |
Następstwa:
Należy pamiętać że po każdej zmianie w kodach, gdy korzystamy z php-fpm wymagane jest zrestartowanie tej usługi przez systemd.
Komentarze