Installer HTTP/2
a2enmod http2
systemctl restart apache2
Je ne vais pas vous faire un cours sur Installer HTTP/2, renseignez-vous...
et rajoutez Protocols h2 http/1.1 dans vos virtual hosts (dans la config du https (443) et surtout pas dans le http:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
ServerName www.example.com
ServerAlias example.com
DocumentRoot /var/www/example.com
<Directory />
Require all denied
Options -Indexes -Includes -ExecCGI -FollowSymlinks
</Directory>
<Directory /var/www/example.com>
Require all granted
Options -Indexes -Includes -ExecCGI +FollowSymlinks
</Directory>
ErrorLog /var/log/apache2/example.com.log
# Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.log combined
Protocols h2 http/1.1
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
a2enmod http2
systemctl restart apache2
Tester HTTP/2
Testez avec par exemple: https://tools.keycdn.com/http2-test
si cela ne fonctionne pas c'est peut être que par défaut Apache utilise le module MPM prefork (Multi-Processing Module prefork module)
donc:
Installer PHP’s FPM package :
aptitude install php7.3-fpm
Activez certains modules :
a2enmod proxy_fcgi setenvif
Activez PHP’s FPM :
a2enconf php7.3-fpm
Désactivez MPM prefork :
a2dismod php7.3 mpm_prefork
Activez le module MPM event module, comme substitut à prefork :
a2enmod mpm_event
redémarrez apache
systemctl restart apache2
Autres réglages
Dans ma première tentative de mettre en place php7.3-fpm, apache plantait souvent, et j'avais ceci dans mes logs:
server reached pm.max_children setting (5), consider raising it
Du coup j'ai paramétré ceci:
pm.max_children = 50
J'avoue ne pas savoir trop quoi mettre comme valeur...pour plus d'info:
https://serverfault.com/questions/479443/php5-fpm-server-reached-pm-max-children
https://myshell.co.uk/blog/2012/07/adjusting-child-processes-for-php-fpm-nginx/
Et pour redémarrer php-fpm automatiquement:
emergency_restart_threshold=3
emergency_restart_interval=1m
process_control_timeout=5s
Cela veut dire si 3 PHP-FPM child process se terminent avec SIGSEGV ou SIGBUS (c.-à-d. Crash) dans l'intervalle d'1 minute, PHP-FPM est censé redémarrer automatiquement. Les child process attendent 5 secondes avant de réagir aux signaux du master.
Sources:
- https://serverfault.com/questions/575457/constantly-have-to-reload-php-fpm
- https://www.php.net/manual/en/install.fpm.configuration.php
Et pour initialiser tous ces changements de configuration:
service php7.3-fpm restart