- Joined
- Sep 15, 2014
- Messages
- 4,357
- Likes
- 8,863
- Degree
- 8
Alright so I was trying to figure out why my ancient websites had HTTP2 enabled but none of my newer sites could get it going, well long story short, it was because of Apache2 mpm_prefork which is needed for php to run on Apache. That will not allow HTTP/2.
(The mpm stuff has to do with multi-threading/processing - quite frankly I can't be bothered to understand it)
My ancient sites were all on NGINX: Enabling HTTP/2 on NGINX
The solution is to disable mpm_prefork and use mpm_event, and then use php-fpm (in my case php8.3-fpm) with Apache2.
Here are the commands you need:
Within your /etc/apache2/sites-available/YOUDOMAIN.COM.conf file you need to make the following updates:
This guide helped a lot (had to switch the php7.4 for 8.3): HTTP2 on Apache
Whenever you restart apache2, you'll also need to restart php-fpm using the exact php you are using:
I'm leaving this here for historical reference.
- CC
Edit:
How to test this with Curl:
Results should be:
If you get HTTP/1.1 200 OK you have failed.
(The mpm stuff has to do with multi-threading/processing - quite frankly I can't be bothered to understand it)
My ancient sites were all on NGINX: Enabling HTTP/2 on NGINX
The solution is to disable mpm_prefork and use mpm_event, and then use php-fpm (in my case php8.3-fpm) with Apache2.
Here are the commands you need:
Code:
: sudo add-apt-repository ppa:ondrej/apache2
: apt-get update
: apt-get install php-fpm
: apt-get install apache2
: a2dismod php
: a2dismod php8.3
: a2dismod mpm_prefork
: a2enmod proxy_fcgi
: a2enmod mpm_event
: a2enmod http2
: a2enmod ssl
: a2enconf php8.3-fpm
: service apache2 restart
: service php8.3-fpm restart
Within your /etc/apache2/sites-available/YOUDOMAIN.COM.conf file you need to make the following updates:
Code:
<VirtualHost *:443>
...
Protocols h2 h2c http/1.1
H2Direct on
# PHP-FPM Setup
<FilesMatch "\.php$">
SetHandler "proxy:unix:/var/run/php/php-fpm.sock|fcgi://localhost/"
</FilesMatch>
...
</VirtualHost>
This guide helped a lot (had to switch the php7.4 for 8.3): HTTP2 on Apache
Whenever you restart apache2, you'll also need to restart php-fpm using the exact php you are using:
Code:
: service apache2 restart
: service php8.3-fpm restart
I'm leaving this here for historical reference.
- CC
Edit:
How to test this with Curl:
Code:
curl -I --http2 -s -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:123.0) Gecko/20100101 Firefox/123.0" https://www.yourDOMAIN.com/ | grep HTTP
Results should be:
Code:
HTTP/2 200
If you get HTTP/1.1 200 OK you have failed.