HTTP/2 and HTTP/3

Turning On HTTP/2, and Apache's Missing HTTP/3

mod_http2 speaks h2 over TLS and cleartext h2c (which browsers never use), and Ubuntu 225 's http2.conf already sets Protocols h2 h2c http/1.1. mod_ssl and HTTPS still got HTTP/1.1, and the error log says why: AH10034: The mpm module (prefork.c) is not supported by mod_http2 ... the HTTP/2 protocol will be inactive. HTTP/2 needs event, and event means dropping mod_php for PHP-FPM (PHP-FPM via proxy_fcgi). The switch, then a check with h2load 5,056 (apt install nghttp2-client):

Switching to event + PHP-FPM, then testing HTTP/2Shell
sudo a2dismod php8.5 mpm_prefork
sudo a2enmod mpm_event proxy_fcgi setenvif && sudo a2enconf php8.5-fpm
sudo apache2ctl configtest && sudo systemctl restart apache2
curl -s --cacert /etc/ssl/localhost/localhost.crt https://localhost/sapi.php
curl -sI --http2 --cacert /etc/ssl/localhost/localhost.crt https://localhost/ | head -1
h2load --h1 -n 40000 -c 50 -t 4 https://localhost/index.html | grep finished
h2load      -n 40000 -c 50 -t 4 -m 10 https://localhost/index.html | grep finished
Output
...
Syntax OK
fpm-fcgi 8.5.4
HTTP/2 200
finished in 957.16ms, 33267.34 req/s, 95.86MB/s
finished in 1.35s, 29717.09 req/s, 79.84MB/s

sapi.php echoes php_sapi_name() and PHP_VERSION; before the switch it said apache2handler 8.5.4. On loopback there is no latency to hide, so ten streams per connection gain nothing; HTTP/2 pays off on real networks. Skip H2Push: Chrome 106 1 and Firefox 132 555 dropped server push for 103 Early Hints (H2EarlyHints on).

HTTP/3. Apache 2.4.68 129 , the current release, has no HTTP/3 or QUIC: its documentation lists no module, and only experimental third-party code exists. nginx 75 has shipped ngx_http_v3_module since 1.25.0 (still marked experimental), and Caddy 7,400 enables HTTP/3 by default. To offer it, put a CDN, nginx or Caddy in front (Proxying and Hardening).