analyse sur un Ubuntu 22.04.1 LTS. tl:dr: voir "5. conclusion"
1 - install apache2 (apres un clean profond)
sudo apt-get --purge remove apache2* && sudo apt-get autoremove && sudo rm -r /etc/apach2 /var/lib/apache2
sudo apt install apache2 apache2-utils ssl-cert
test get
http://localhost ok (landing page d'apache 2 ubuntu)
test upload 10G sur / en http (avec curl -F): ok
lors d'un upload (POST) le serveur répond un 404 car il n'y rien par défaut pour traiter un POST sur '/'. Mais en HTTP 1.1 le client envoi quand meme toute les data.
2 - activation http/2:
sudo a2enmod http2 ssl
création d'un vhost pour 433 (certificat locaux; affichage d'un répertoire).
redémarrage apache2
test get
https://localhost : ok
test upload 10G sur
https://localhost: erreur ("Stream error in the HTTP/2 framing layer")
test upload 10G sur
https://localhost en forcant http1.1 : ok
c'est bien HTTP/2 (et pas le chiffrement) qui pose problème donc.
ce qui semble normal vu le fonctionnement d'http/2 car on fait un POST (entete+data) , le serveur reçoit les trames d'entete, traite de suite et renvoi la réponse (un 404 ou un 200 suivant le path demandé) et ferme le stream (on voit bien le 'stream 0 closed' avec curl -v). Et donc ne consomme jamais la suite des trames de data (en http1.1 c'est un seul flux entete+data).

(source :
https://web.dev/performance-http2/ )
=> Il manque donc quelque chose coté serveur pour traiter les POST en "consommant" tout le stream y compris les trames data.
C'est normal car de base apache2 ne gere que du contenu statique. cela fait pareil avec nginx d'ailleurs.
Il manque donc un "handler" pour traiter les POST et consommer la data.
3 - installation de php
sudo apt install php-fpm libapache2-mod-php
redémarrage d'apache2:
test upload 10G: erreur, aucun changement . normal.
4. activation de php:
sudo a2enmod proxy_fcgi setenvif
redémarrage d'apache2:
test upload 10G: erreur, aucun changement . normal.
sudo systemctl start php8.1-fpm
sudo systemctl enable php8.1-fpm
sudo a2enconf php8.1-fpm
redémarrage d'apache2:
test upload 10G: erreur, aucun changement . normal.
creation d'un simple fichier hello.php dans la répertoire racine:
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<body>
<?php echo "Hello World"; ?>
</body>
</html>
redémarrage d'apache2:
test upload 10G: erreur, aucun changement . normal.
test php:
curl
https://localhost/hello.php-> ok on a bien hello world
test upload 10G sur
https://localhost/: erreur, aucun changement . normal.
test upload 10G sur
https://localhost/hello.php -> OK !
5. conclusion:
tout semble logique donc, il faut un 'handler' qui consomme la data.
un moyen si php est installé est d'activer le handler sur la racine '/':
<Directory "/some/path">
....
SetHandler "proxy:unix:/run/php/php8.1-fpm.sock|fcgi://localhost"
...
</Directory>
comme n'importe quel url va passer par le handler php et pas seulement ceux terminant par .php
Tu peux aussi ne matcher que '/' et pas un sous chemin avec un LocationMatch:
<LocationMatch "^/$">
SetHandler "proxy:unix:/run/php/php8.1-fpm.sock|fcgi://localhost"
</LocationMatch>
l'avantage ainsi c'est tes fichiers statiques /10G/10G.iso par exemple, ne passeront pas par le handler php en sortie sur un GET.
ou alors ne mettre le handler que si c'est POST. etc
bon pres utiliser le handler php pour consommer des données n'est peut-etre pas la meilleur des méthodes. Il faudrait voir si y'a un mod ou une config qui permet de consommer tout un POST sans impact sur le serveur.