HTTP2 – Apache2 – PHP8.4-fpm

  1. Włączenie modułu apache2 http2
  2. Zmiany w virtual hosts
  3. Zmiany w PHP

Sprawdź wersję Apache (powinna być ≥ 2.4.17):

# apache2 -v

Włącz moduły http2 i ssl

# a2enmod http2
# a2enmod ssl

Skonfiguruj Virtual Host dla HTTPS

<VirtualHost *:443>

# ... istniejące ustawienia SSL ... 

# Włącz HTTP/2 
Protocols h2 http/1.1 

# Zalecane ustawienia SSL dla kompatybilności z HTTP/2 
SSLEngine on 
SSLCertificateFile /ścieżka/do/certyfikatu.crt 
SSLCertificateKeyFile /ścieżka/do/klucza.key 

SSLCipherSuite EECDH+CHACHA20:EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH 
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1

</VirtualHost>

Sprawdź MPM (Multi-Processing Module)

HTTP/2 wymaga użycia MPM event nie prefork

# apachectl -M | grep mpm

  mpm_prefork_module (shared)
a2dismod mpm_prefork

a2enmod mpm_event

Uwaga: Jeśli używasz mod_php (np. dla PHP), musisz przejść na php-fpm, ponieważ mod_php nie jest kompatybilny z MPM event.

# apt install php8.4-fpm
# a2dismod php8.4  # Wyłącza moduł mod_php

Włącza wymagane moduły Apache2

# a2enmod proxy_fcgi setenvif
# a2enconf php8.4-fpm          # Tworzy konfigurację dla FPM 
# ls - l /etc/apache2/conf-available/php8.4-fpm.conf  # plik konfig.

Skonfiguruj Apache do współpracy z php-fpm:

Edytuj konfigurację Twojego hosta wirtualnego (np. /etc/apache2/sites-available/example.conf) i dodaj:

<FilesMatch "\.php$">
   SetHandler "proxy:unix:/run/php/php8.4-fpm.sock|fcgi://localhost"
</FilesMatch>

lub dodaj globalną konfigurację w /etc/apache2/conf-available/php8.4-fpm.conf:

<IfModule proxy_fcgi_module>
  <FilesMatch "\.php$">
    SetHandler "proxy:unix:/run/php/php8.4-fpm.sock|fcgi://localhost/"
  </FilesMatch>
</IfModule>

Restart usług

# systemctl restart apache2 php8.4-fpm

Testy php-fpm i http2

# systemctl status php8.4-fpm

phpinfo(); exit;  # w skrypcie
# curl -I --http2 -k https://twoja-domena.pl

Pliki konfiguracyjne

/etc/php/8.4/fpm/pool.d/www.conf    # FPM

np. pm.max_children, pm.start_servers 
/etc/php/8.4/fpm/php.ini   # zamiast w /etc/php/8.4/apache2/php.ini