Apache/Apache+HTTP2+PHP-FPM+TLS1.3
Diese Seite beschreibt, wie man Apache so einrichtet, dass es HTTP/2 beherrscht. Dabei wird gleich auch TLS 1.3 und für PHP-Anwendungen PHP-FPM eingerichtet. Die Beispiele sind unter openSUSE entstanden.
Info zu HTTP/2
PHP-FPM
PHP-FPM wird benötigt, da Apache für HTTP/2 nicht im Prefork-Modus laufen kann, sondern ein anderes Multi-Processing-Modul wie "event" verwendet werden muss (siehe unten). Das Standard-PHP-Modul für Apache funktioniert jedoch nicht mehr mit "event", so dass für PHP-Anwendungen eine andere Lösung implementiert werden muss. PHP-FPM läuft als eigenständiger Dienst und kann sowohl per TCP als auch per Unix Socket angesprochen werden.
Info
Konfiguration
Datei /etc/php7/fpm/php-fpm.conf: Default-Datei kann verwendet werden.
Datei /etc/php7/fpm/php-fpm.d/www.conf (Erste Variante für TCP, zweite für Unix Socket - geht aber nicht parallel):
user = wwwrun
group = www
listen = 127.0.0.1:9000
listen = /run/php-fpm/php-fpm.sock
listen.owner = wwwrun
listen.group = www
listen.mode = 0660
Datei /etc/php7/fpm/php.ini:
- Hier sollte manuell eine Kopie der für Apache gültigen Ini-Datei abgelegt werden.
cp -p /etc/php7/apache2/php.ini /etc/php7/fpm/
- Achtung: Ohne diese Datei fehlen viele Konfigurationseinstellungen!!
Dienst einrichten und starten
systemctl enable php-fpm systemctl start php-fpm
Prüfen
- Prozesse laufen als wwwrun:
ps -ef|grep php-fpm
wwwrun 7295 22565 1 07:43 ? 00:00:08 php-fpm: pool www wwwrun 9294 22565 2 07:51 ? 00:00:00 php-fpm: pool www wwwrun 9406 22565 1 07:51 ? 00:00:00 php-fpm: pool www root 22565 1 0 Nov10 ? 00:00:05 php-fpm: master process (/etc/php7/fpm/php-fpm.conf)
- Datei für Unix Socket (Rechte):
ls -la /run/php-fpm/php-fpm.sock
srw-rw---- 1 wwwrun www 0 10. Nov 15:47 /run/php-fpm/php-fpm.sock
- Für TCP:
netstat -an|grep 9000
- Prüfen per phpinfo():
Configuration File (php.ini) Path /etc/php7/fpm Loaded Configuration File /etc/php7/fpm/php.ini Scan this dir for additional .ini files /etc/php7/conf.d
Fallstricke
- AppArmor
- Unter openSUSE läuft AppArmor. Die Default-Konfiguration /etc/apparmor.d/php-fpm schränkt PHP-FPM aber zu sehr ein. Es gibt im Browser einen Fehler "Access denied" bei PHP-Anwendungen.
- AppArmor temporär deaktivieren:
aa-teardown aa-status
Apache
Info
- Apache HTTP Server unterstützt HTTP/2
- Apache HTTP/2 Modul mod_http2
- Apache HTTP/2 guide / HowTo
- how to h2 in apache
- How to enable HTTP/2 support in Apache