Http/1, http/2, http/3

Tags: #<Tag:0x00007f955d6e6348>

Il serait temps pour moi (retardataire) d’activer HTTP/2.

Suite à avoir activer 4 frontaux, à la place de 1 qui pointés sur 2 serveurs Web en arrière plan « backends » et que maintenant il y 4 backends sur 2 « sites physiques » (lieux), j’ai des problèmes de « Proxy Error 502 », une erreur Technique – 502 – Le serveur web a reçu une réponse invalide, HTTP 502, 502 Proxy Error…

Donc, j’ouvre ce topic pour mémo sur de la documentation.

Informations sur les protocoles HTTP / 1.1, HTTP 2, HTTP 3

Par Grafikart : Quelles sont les différences entre HTTP 1, 2 & 3 ?

Dans ce tutoriel Grafikart vous propose de découvrir le protocole HTTP et ses évolutions. L’objectif est de comprendre comment ces changements affectent notre manière de concevoir des applications webs.

  • 00:00 HTTP1/1
  • 05:00 HTTP/2
  • 12:40 HTTP/3

HTTPS : l’impact sur les temps de chargement
Ce n’est un secret pour personne : les sites en HTTPS sont a priori plus gourmands en ressources que les sites HTTP et la complexité introduite dans la communication entre le serveur et le navigateur peut impacter les temps de chargement. Les questions qui se posent alors sont : à quel niveau les ralentissements se font-ils ? Dans quelle mesure ? Et quelles sont les solutions pour éviter ces ralentissements ?


HTTP/2 comparé à HTTP/1.1 : Comment ces protocoles affectent-ils les performances web ?
HTTP/2 permet aux développeurs de personnaliser la définition de priorités ou l’ordre de chargement des ressources web. HTTP/2 offre également un certain nombre d’autres améliorations de performances par rapport à HTTP/1.


Le protocole HTTP/3 : nouveautés et changements par rapport à HTTP/1 et HTTP/2

HTTP est un protocole de transfert hypertexte qui permet d’assurer le transport des données entre client et serveur. Comment sommes-nous passés de HTTP/1 à HTTP/3 ? Pourquoi, et quelles sont les évolutions et les améliorations apportées d’une version du protocole à l’autre ? Voyons ce qui change avec HTTP/3, et comment il permet d’aller vers un web toujours plus rapide et sécurisé.


HTTP/3 : fonctionnement et performances web
Quels sont les avantages de HTTP/3, et comment ce protocole fonctionne-t-il ? Sur le plan technique, en quoi il contribue à améliorer la vitesse de chargement ? On vous explique ce qu’il faut savoir sur le protocole HTTP/3.

Résumons rapidement les épisodes précédents. HTTP/2 a permis des avancées en termes de performance web par rapport à HTTP/1…

HTTP/3 versus HTTP/2
Le HTTP/3 plus rapide et plus sécurisé que le HTTP/2 ?

Partir à la découverte des évolutions apportées par HTTP/2.

Cet article fait partie de la série HTTP/2, contenant les articles suivant :


Passer à HTTP/2 pour améliorer les performances d’utilisation d’une API
https://blog.dcube.fr/2018/07/19/passer-en-http-2-pour-ameliorer-les-performances-dune-api/
Lorsque l’on développe ou utilise une API, on souhaite que celle-ci puisse être consommée de la manière la plus performante possible; il existe aujourd’hui une mesure technique relativement simple (quand on en remplit les prérequis), qui ne nécessite quasiment aucun développement et n’introduit pas de risque de régression : passer le protocole de communication entre le client et l’API de HTTP 1.1 à HTTP 2.0.

INSTALLER/CONFIGURER SUR APACHE HTTP/2

Installer et activer HTTP2 sur Apache2
L’avancée majeure est qu’avec ce protocole, les requêtes HTTP2 peuvent être envoyées en rafale durant la même connexion TCP !

Activer http/2 avec Apache
Depuis quelques années maintenant est disponible le http/2, version améliorée du http (plus rapide, supportant l’envoi de requête multiple, etc). Debian Strech ayant les bonnes versions de Apache, Openssl, etc dans les dépôts stables pour pouvoir l’activer, ce qui n’était pas le cas avec Jessie, on va donc voir comment l’activer.

Apache : Guide HTTP/2
Ce document est le guide de l’utilisateur de l’implémentation de HTTP/2 dans Apache httpd. Cette fonctionnalité en est au stade de production, et les interfaces et directives devraient donc être dorénavant relativement stables.

Apache : Module Apache mod_http2
Pour mettre en oeuvre les fonctionnalités décrites dans ce document, vous devez activer HTTP/2 en utilisant la directive Protocols. HTTP/2 n’imposant pas de chiffrement, deux protocoles sont disponibles : h2 (HTTP/2 avec TLS) at h2c (HTTP/2 avec TCP).

Module Apache mod_proxy_http2
Avertissement : il ne sera effectué aucune tentative de fusion de plusieurs requêtes entrantes HTTP/1 (devant être mandatées vers le même serveur d’arrière-plan) vers des flux HTTP/2 appartenant à la même requête HTTP/2. Chaque requête HTTP/1 entrante sera mandatée vers le serveur d’arrière-plan en utilisant une requête HTTP/2 séparée (tout en réutilisant si possible la même connexion TCP).


Merci à tous.
Romain.

Salut,

j’ai configuré mes serveurs d’arrière plan PHP « backends » en HTTP/2 ; çà fonctionne bien, exemple : ww1 , ww2 et ww3 (dot) ZW3B (dot) Net :wink:

J’ai dû supprimé les « php_value » et « php_flag » de mes « .htaccess » pour les ajouter dans le fichier « .user.ini » à la racine du/des sites web :

De cette façon (sans les php_value ou php_flag) :

root@ww1.lb1.srv.fr.lab3w.com:~ # cat /var/pro/web_sites/zw3b_fr/www/web/.user.ini
########################################################
# SESSION

#php_value session.save_path "/var/pro/web_sites/zw3b_net/www/tmp/"
session.save_path "/var/pro/web_sites/zw3b_net/www/tmp/session/"

#php_flag register_globals off

# SESSION
########################################################

########################################################
# ERREURS AFFCIHAGE

#php_value display_errors 1
#display_errors 1
#php_value track_errors 1
#php_value display_startup_errors 1

#php_flag display_errors 1
#php_flag display_startup_errors 1
#php_flag html_errors 1
#php_flag log_errors 1

#php_flag xdebug.force_display_errors 1
#php_flag xdebug.force_error_reporting on
#php_flag xdebug.show_error_trace on

#php_flag xdebug.default_enable 1
#php_flag xdebug.auto_trace 1

#php_flag  xdebug.remote_enable 1
#php_value xdebug.remote_host "your_ip_without_quotes"
#php_value xdebug.remote_port 9000
#php_value xdebug.idekey PHPSTORM
#php_flag  xdebug.remote_autostart on

# ERREURS AFFCIHAGE
########################################################

########################################################
# FORMULAIRE UPLOAD

# Augmente la variable upload via formulaire (marche pas pour php5)
#php_value upload_max_filesize 150M
#php_value post_max_size 150M
upload_max_filesize 150M
post_max_size 150M

# Maximum execution time of 300 seconde (default 30)
#php_value max_execution_time 300
max_execution_time 300

# Memory Limit
#php_value memory_limit 128M
memory_limit 128M

########################################################

Et, j’ai ajouté dans /etc/apache2/apache2.conf ou le .htaccess des sites :

<Files ".user.ini">
    Require all denied
</Files>

Ainsi que pour mes serveurs d’extrémité avant « frontends », j’ai aussi configuré en HTTP/2.

Capture d'écran 2025-01-22 105726 - www.zw3b.fr - HTTP2

Capture d'écran 2025-01-22 102205 - howto.zw3b.fr - HTTP2

Je vois bien dans les logs Apache des « backends » le protocole "HTTP/2.0" OK :

XXX.XX.XXX.183 - - [22/Jan/2025:10:17:06 +0100] "GET /music/deep-house/yousuke-yukimatsu-boiler-room-tokyo HTTP/2.0" 200 11051 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"

Cà charge bien mieux les sites web, (beaucoup) plus rapidement je trouve.

CF Page → « Balancer manager », celle du site ¿How to? ‹ Or › ¿What to do?
Computer documentation on the Art of systems, networks and InterNet solutions.

Capture d'écran 2025-01-22 130625 - Apache Load Balancer - www.zw3b.blog - HTTP2 - UK + CA + FR
3 des « Frontends » UK|CA|FR Load balancers → 3 en « backends » OK + 1 Stand By OK - config HTTP/2

Romain → Mon portfolio se charge trop rapide :sunglasses:

Bonne journée à toutes et à tous !

Cà claque Hypertext Transfer Protocol/2 (HTTP2), excellent !

@+


TODO Check → Directive MaxRequestWorkers :
mpm_common - Serveur HTTP Apache Version 2.4

La directive MaxRequestWorkers permet de fixer le nombre maximum de requêtes pouvant être traitées simultanément. Si la limite MaxRequestWorkers est atteinte, toute tentative de connexion sera normalement mise dans une file d’attente, et ceci jusqu’à un certain nombre dépendant de la directive ListenBacklog . Lorsqu’un processus enfant se libèrera suite à la fin du traitement d’une requête, la connexion en attente pourra être traitée à son tour.

Pour les serveurs non threadés ( c’est à dire utilisant prefork ), la directive MaxRequestWorkers définit alors le nombre maximum de processus enfants qui pourront être lancés simultanément pour traiter les requêtes. La valeur par défaut est 256 ; si vous l’augmentez, vous devez aussi augmenter la valeur de la directive ServerLimit .

Pour les serveur threadés et hybrides (utilisant par exemple event ou worker ), MaxRequestWorkers définit alors le nombre total de threads qui seront disponibles pour servir les clients. Dans le cas des MPMs hybrides, la valeur par défaut est 16 (directive ServerLimit ) multiplié par la valeur 25 (directive ThreadsPerChild ). Par conséquent, pour affecter à la directive MaxRequestWorkers une valeur qui requiert plus de 16 processus, vous devez aussi augmenter la valeur de la directive ServerLimit .

Le nom de la directive MaxRequestWorkers était MaxClients avant la version 2.3.13. Cet ancien nom est encore supporté.

HTOP des serveurs ZW3B LAB3W après HTTP/2 - çà consomme des ThreadsPerChild :

J’ajoute çà les stats « Youtubeur » d’une vidéo. Je trouve çà très bizarre, je ne sais quand est-ce qui refresh, si c’est « instantané » c’est bizarre, 1 vue depuis 4h pour la vidéo du dessus.
Capture d'écran 2025-01-22 161442 - Youtube - VideoID q86Dnxp8Uz4 - 4h03
« Sur une période initiale de 4 heures 3 minutes » me disent t’ils, 1 vue.

Capture d'écran 2025-01-22 170339 - Youtube - VideoID q86Dnxp8Uz4 - 4h48
« Sur une période initiale de 4 heures 48 minutes » me disent t’ils, 2 vues.

:wink:


Je vous ajoute ces statistiques « Par jour » et « Par minutes » (style un MRTG toutes les 10min) de mon utilisation de l’API YouTube Data v3.

À la dernière minute 2025-01-22 15h20, il y a 13 289 requêtes qui sortent des « iframes » vers Youtube de mes sites web :wink:

Je suis à 1 million 220 mille 117 requêtes depuis 9h ce matin, çà marche encore plus fort en HTTP/2 :wink:

Vous n’avez pas d’anti-Youtube à priori… :crazy_face:

Depuis le 11.14 j’ai activé 4 Frontaux à la place d’1, j’ai re.re.refais une demande pour une augmentation de pouvoir d’utilisation :wink:

Capture d'écran 2025-01-22 152719 Quotas Per Days – API et services – ZW3B-App - Youtube

Capture d'écran 2025-01-22 152743 Quotas Per Minutes – API et services – ZW3B-App - Youtube

Capture d'écran 2025-01-22 171422 API et services – API et services – ZW3B-App – Console Google Cloud - Homepage 30 day - 977 550 queries + cache system on my ZW3b.App
En sachant qu’il y a 86 400 secondes dans une journée.
Je fais quand même 60 milles et quelques demandes et de « Mise À jour » Youtube par jour :wink:
Malgré que j’ai mis en place un système de cache (sur certaines données, les infos des chaines, sur 12h de cache) pour ne pas « taper » tout le temps, pour chaque internautes ; pour soulager Youtube :wink: Et, pour plus de rapidité sur mes sites « clients » web.

Normalement, j’ai 0% d’erreur ; c’est parce que j’atteins la limite de mes quotas journalier depuis quelques jours.


Comme je leur ai envoyé (à Youtube), je suis bloqué depuis le 11 :smiley: Ils vont me débloquer bientôt, normalement :innocent:

  • 24/01/2025 Limite atteinte à 6h02min 03s - 2 974 819
  • 23/01/2025 Limite atteinte à 2h07min 34s - 2 958 104
  • 22/01/2025 Limite atteinte à 2h15min 57s - 2 947 072
  • 21/01/2025 Limite atteinte à 3h17min 35s - 2 927 087
  • 20/01/2025 Limite atteinte à 4h06min 35s - 2 949 184
  • 19/01/2025 Limite atteinte à 4h11min 20s - 2 999 867
  • 18/01/2025 Limite atteinte à 4h09min 48s - 3 007 125
  • 17/01/2025 Limite atteinte à 3h42min 48s - 3 011 377
  • 16/01/2025 Limite atteinte à 2h30min 45s - 2 987 624
  • 15/01/2025 Limite atteinte à 3h34min 15s - 2 947 845
  • 14/01/2025 Limite atteinte à 1h15min 08s - 3 002 573
  • 13/01/2025 Limite atteinte à 3h40min 15s - 2 950 286
  • 12/01/2025 Limite atteinte à 3h07min 37s - 2 829 594
  • 11/01/2025 Limite atteinte à 8h57min 37s - 2 903 104

Il me faut vos « ID » ADSense les ami·es :wink: Un jour il faudrait en discuter.

Sympa tout çà !

Romain.


J’aime bien cette journée et le HTTP/2 → j’ai pris fort en requêtes de transit (de stream) entre mes sites web et Youtube.

Capture d'écran 2025-01-22 171422 API et services – API et services – ZW3B-App – Console Google Cloud - Homepage 30 day - 977 550 queries + cache system on my ZW3b.App
On voit mieux sur les 7 derniers jour ; je suis passé de ~ 12k à 20k minutes - du style :wink:

@+

Bonne fin d’journée à tous !


Edit : 2025/01/23 à 8h00 : je vais changer de tactique, çà galère trop.

J’ai changé mes DNS (j’ai désactivé les 2 VPS pour mon « .fr » et mon « .tv »

root@srv.fr.lab3w.com:~ # host www.zw3b.fr
www.zw3b.fr has address 90.5.102.244
www.zw3b.fr has address 158.69.126.137
www.zw3b.fr has IPv6 address 2a01:cb1d:5:af00::1
www.zw3b.fr has IPv6 address 2607:5300:60:9389::1

Donc, çà pointe sur mes 2 serveurs FR ou CA (où il y a les « backends »).

  1. Quand on arrive sur une des IP FR çà pointe dans les « backends » local au serveur « frontend ». donc en France.
  2. Quand on arrive sur une des IP CA çà pointe dans les « backends » local au serveur « frontend », donc au Canada.

Çà évite que cela transite par les liens VPN en permanence.

J’ai quand même configuré les serveurs « hors site physique » en mode « parking, de rechange » et/ou « Stand by OK » qui est sollicité que si tous les autres serveurs cibles du jeu de serveurs sont indisponibles.

Pour le serveur FR :

Worker URL Route RouteRedir Factor Set Status Elected Busy Load To From HC Method HC Interval Passes Fails HC uri HC Expr
h2://[fc00:5300:60:9389:15:1:a:10] ww1.lb1.ipv10.net 1.00 0 Init Spar Ok 11 0 3100 12K 0 TCP 5000ms 2 (0) 3 (0)
h2://[fc00:5300:60:9389:15:2:a:10] ww2.lb2.ipv10.net 1.00 0 Init Stby Ok 17 0 -1200 22K 0 TCP 5000ms 2 (0) 3 (0)
h2://[fc01::10:126:42:10] ww1.home.lab3w.fr 1.00 0 Init Ok 81 2 -6900 75K 0 TCP 5000ms 2 (0) 3 (0)
h2://[fc01::10:106:42:10] w3a.dc.lab3w.fr 1.00 0 Init Stby Ok 1 0 5000 0 0 TCP 5000ms 2 (0) 3 (0)

Normalement, çà marche bien mieux.

Et, surtout l’info que je voulais remonter ; c’est QUE « Firefox Nightly » déconne complétement ; il va toujours me chercher « www.zw3b.fr » en UK dans mon VPS, çà fait 1 heure que j’ai mis à jour mes DNS dig « google » me retourne les bonnes adresses, depuis Chrome tout fonctionne normalement.

root@vps.uk.ipv10.net:~ # dig ANY www.zw3b.fr @dns.google

; <<>> DiG 9.18.28-1~deb12u2-Debian <<>> ANY www.zw3b.fr @dns.google
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22692
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.zw3b.fr.                   IN      ANY

;; ANSWER SECTION:
www.zw3b.fr.            3600    IN      A       158.69.126.137
www.zw3b.fr.            3600    IN      A       90.5.102.244
www.zw3b.fr.            3600    IN      RRSIG   A 8 3 3600 20250222072836 20250123062836 49509 zw3b.fr. nFLZk/xMWDiFjZP9pC+b+6brVNPuvSg9KyAeCgMB/pJd5MCUzSy6Ei2L z33eJJY6ZHwAYoVToSFXiC1L0C0zL4msabvqOmb7hddBy8B9lltNhUXu qsH2SnGBFvtRTfVgQ6sIigkKE/F7BZnoewZKLbvCXcvsRg2opqh6nAIW r/Y=
www.zw3b.fr.            3600    IN      AAAA    2607:5300:60:9389::1
www.zw3b.fr.            3600    IN      AAAA    2a01:cb1d:5:af00::1
www.zw3b.fr.            3600    IN      RRSIG   AAAA 8 3 3600 20250222072836 20250123062836 49509 zw3b.fr. scsleopchVmetxRKug/wUtaN8mbKcg8BGcwjje2Zp1+U8G20AUmJVoI2 rBuaL/K5mVDmA3gse2WyGuNOGe4ApNw9RY/6Wk8fH/NKHcRt2U/ImLrJ dQw87LQ48fCbujNyb+bGl4NBJStf/c76jwAOt4intbfO4ArRHO7iaKgv d6Q=

;; Query time: 248 msec
;; SERVER: 2001:4860:4860::8888#53(dns.google) (TCP)
;; WHEN: Thu Jan 23 08:05:20 GMT 2025
;; MSG SIZE  rcvd: 462

Qui me retourne bien les 2 adresses, celles de France et celles du Canada - il n’y a plus les IP Allemande et de Grande-Bretagne.


Vu que je parle aussi d’Apache « mod proxy » sur cette page sur HTTP.

Je vous ajoute quelques chose de « super important ».

Si vous « m’était en place » un proxy reverse, il faut autoriser sur les « backends » seulement l’adresse des « frontends » par précaution.

Le Contrôle d’accès d’Apache :grin:

Exemple du VHOST en « backends » :

<IfModule mod_ssl.c>
<VirtualHost [2607:5300:0060:9389:15:3:a:10]:443 [fc00:5300:60:9389:15:3:a:10]:443 10.103.150.10:443>

        <Location "/">
                #  Interdire à tous le monde (par précaution), non obligatoire.
                Require all denied

                # Frontend CA
                Require ip 10.69.126.137
                Require ip fc00:5300:60:9389::1

                # Frontend FR
                Require ip 10.106.42.10
                Require ip fc01::10:106:42:10

                # Frontend DE
                Require ip 10.125.133.51
                Require ip fc00:41d0:701:1100::6530

                # Frontend UK
                Require ip 10.128.171.43
                Require ip fc00:41d0:801:2000::44f9

                # Autoriser les potes qui on le droit d'acceder au backend directement
                # Par exemple sur l'addresss ww3.domain.tld                
                Require ip fc01::172:16:0:142

#                Autoriser à tous le monde (for tests)
#                Require all granted

        </Location>

[...]

</VirtualHost>
</IfModule>

Ça me fait penser aux balises :

Header set X-Frame-Option: "sameorigin"
Header set X-Content-Type-Options: "nosniff"

Bonne journée.

Salut,

Je voulais vous demander « si vous trouver » çà normal ?

Dans « Chrome » je vois le tag « RemoteClient » avec l’adresse IP de mon serveur « frontend » ?

Capture d'écran 2025-01-23 151427 - ZW3B.FR - Chrome RemoteClient Address IP Server

Certes mon site web est « client » de « Google Chrome » mais bon :face_with_raised_eyebrow:

Qu’en pensez-vous !?

Sinon.

Dans mes logs Apache « frontends » et « backends » tout va bien, je vois bien l’adresse IP du « client » (l’internaute).

Celle en vert sur l’image (configuration Apache mod remoteip.conf pour « Proxy Reverse » - où il faut ajouter le « header set X-Forwarded-For » qui permet de pouvoir l’attraper dans les Apaches en arrière-plan « backends » avec un « Require ip » ou un « Allow From » normalement et pour les logs :wink:

Hors PHP (en PHP, il faut utiliser la fonction « get_headers() ».

:wink:


D’autres « impression écrans » :

Capture d'écran 2025-01-23 154940 - LaFibre.info - Chrome RemoteClient Address IP Server

Capture d'écran 2025-01-23 154953 Debian-FR.org - Chrome NO RemoteClient Address IP Server

Capture d'écran 2025-01-23 154601 - ZW3B.FR - FF No RemoteClient

Cà doit être un fait exprès, ils s’en balancent le « navigateur internet » de notre IP, ils veulent les IP des serveurs eux, plutôt logique.

Alors comment unset cette variable de Chrome ? va savoir ? Seigneur·e·s Debian-FROS ?


J’ai la console Chrome en français maintenant, je ne sais pas comment … je n’ai même pas « reboot windows ».

Capture d'écran 2025-01-23 170104 - IPv10.Net - Chrome RemoteClient Address IP Server en FR


Vraiment, je n’en peut plus !!

Maintenant y’a carrément plus qu’une seule requête entre #ZW3B et YOUTUBE !
Capture d'écran 2025-01-23 172529 Quotas Per Minutes – API et services – ZW3B-App - Youtube

Y’a des journées comme celle-ci que je n’aime pas trop !

:wink:

Je n’arrive pas à ouvrir les liens PHPSource avec PHP-FPM


J’ai trouvé çà pour afficher un PHP Source avec PHP-FPM dans NGINX, çà me paraît surprenant et complètement fou.

Moi, qui faisait un petit lien symbolique :

 root@lb1.ww1:/home/directory/web/site/ # $ ln -s file.php file.phps

Regarde mon fichier https://mywebsite.tld/file.phps si tu veut la voir la source PHP :wink:

Pour ressortir des scripts PHP « à partager » rapidement, c’était simple !

C’est vraiment fou.


Pour infos j’ai bien la bonne configuration Apache :

AddType application/x-httpd-php-source phps
AddType application/x-httpd-php php

Et dans le .htaccess,

<Files ~ "\.(phps)$">
    Require all granted
</Files>

Tiens, çà me fais penser au « SetHandler »…

Recherche : « SetHandler php-fpm application/x-httpd-php-source »


J’arrive à faire çà déjà : https://ww2.zw3b.blog/zw3bApiClient.class.phps (Access denied.)

Avec çà dans le VHOST du « backend » IPv6 only :

<FilesMatch \.(phps)$>
        Require all granted
        SetHandler "proxy:unix:/var/run/php/php8.2-fpm.sock|fcgi://localhost"
#       SetHandler application/x-httpd-php-source
        AddType application/x-httpd-php-source phps

        Order deny,allow
        Deny from all
        Allow from all
</FilesMatch>

Comme çà, çà ne télécharge même plus le « PHPSource », on est beau là :blush: :crazy_face:


Note de Moi-même le 2025/01/24 à 8h30 :

J’ajoute ce lien au sujet : Rewrite Server Web Apache :laughing: - #2 by ZW3B

Quelqu’un a une solution, pour les PHPSource avec PHP-FPM ?

Parce que, c’est très intrusif, le truc, tu clics sur un lien « .phps » et le fichier se télécharge, ce n’est pas « user-friends » comme truc. Çà fait assez peur.

Romain.
Bonne journée.


Note de Moi-même le 2025/01/24 à 11h12 :

J’ai trouvé la page de grafikArt : PHP FPM pour Apache, mais je n’y arrive pas non plus avec ces infos.

Comment-faire pour faire lire un fichier HTML remake PHP ?

J’ai bien mon :

AddType application/x-httpd-php htm html php

Exemple : sur ww2 (IPv6 only) →

Et, les .phps !?

root@lb2.ww2:~ # ls -l /var/pro/web_sites/zw3b_blog/www/web/
total 2100
[...]
lrwxrwxrwx 1 root     root          10 Oct 23  2023 clocks.html -> clocks.php
-rw-r--r-- 1     1000     1000   72223 Jul  4  2024 clocks.php
lrwxrwxrwx 1 root     root          10 Mar 27  2024 clocks.phps -> clocks.php
[...]

Yep : Je ne sais pas comment j’ai fais, j’ai le PHPSource accessible… sans colorie syntaxique par contre … je ne vais pas mettre un highlight_file() ce n’est pas possible.

Personne n’a de solution, quelqu’un fait un « Hook » pour le module s’il vous plaît !?

J’hallucine, j’arrive à accéder à la source du PHP par le « frontal », çà par dans la « node » « lb2.ww2 », le même « backend » que dans l’exemple du dessus :

Capture d'écran 2025-01-24 112439. - ZWB3.blog - Clocks.phps

Je ne comprends pas ?


Bon, on va « commencer » par le module PHP-FPM - HTTPD - Apache Software Foundation :

Sur « ww1 » IPv6 only en php7.3-fpm) → Clocks :-: ZW3B

root@lb1.ww1:~ # cat /etc/apache2/conf-enabled/php7.3-fpm.conf
# Redirect to local php-fpm if mod_php is not available
<IfModule !mod_php7.c>
<IfModule proxy_fcgi_module>
    # Enable http authorization headers
    <IfModule setenvif_module>
    SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
    </IfModule>

    <FilesMatch ".+\.ph(ar|p|tml)$">
        SetHandler "proxy:unix:/run/php/php7.3-fpm.sock|fcgi://localhost"
    </FilesMatch>
    <FilesMatch ".+\.phps$">
        # Deny access to raw php sources by default
        # To re-enable it's recommended to enable access to the files
        # only in specific virtual host or directory
        Require all denied
    </FilesMatch>
    # Deny access to files without filename (e.g. '.php')
    <FilesMatch "^\.ph(ar|p|ps|tml)$">
        Require all denied
    </FilesMatch>
</IfModule>
</IfModule>

Sur « ww2 » (IPv6 only en php8.2-fpm) → Clocks :-: ZW3B.

root@lb2.ww2:~ # cat /etc/apache2/conf-enabled/php8.2-fpm.conf

# Redirect to local php-fpm if mod_php is not available
<IfModule !mod_php8.c>
<IfModule proxy_fcgi_module>
    # Enable http authorization headers
    <IfModule setenvif_module>
    SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
    </IfModule>

    # Using (?:pattern) instead of (pattern) is a small optimization that
    # avoid capturing the matching pattern (as $1) which isn't used here
    <FilesMatch ".+\.ph(?:ar|p|tml)$">
        SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost"
    </FilesMatch>
# The default configuration works for most of the installation, however it could
# be improved in various ways. One simple improvement is to not pass files that
# doesn't exist to the handler as shown below, for more configuration examples
# see https://wiki.apache.org/httpd/PHP-FPM
#    <FilesMatch ".+\.ph(?:ar|p|tml)$">
#        <If "-f %{REQUEST_FILENAME}">
#            SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost"
#        </If>
#    </FilesMatch>
    <FilesMatch ".+\.phps$">
        # Deny access to raw php sources by default
        # To re-enable it's recommended to enable access to the files
        # only in specific virtual host or directory
        Require all denied
    </FilesMatch>
    # Deny access to files without filename (e.g. '.php')
    <FilesMatch "^\.ph(?:ar|p|ps|tml)$">
        Require all denied
    </FilesMatch>

    # MY TEST FOR PHP SOURCE
    <FilesMatch ".+\.phps$">
        Require all granted
        SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost"
#        SetHandler "proxy:unix:/run/php/php8.2-fpm.sock"
#       SetHandler "proxy:fcgi://localhost"
    </FilesMatch>
</IfModule>
</IfModule>

Dans Firefox/136.0 :

  • ww1 (IPv6 only en php7.3-fpm) → m’affiche un truc dégueu
    (pourtant sur .phpsRequire all denied)
  • ww2 (IPv6 only en php8.2-fpm) → accès denied
    (pourtant sur .phpsRequire all granted)

Dans Chrome/132.0.0.0 :

  • ww1 (IPv6 only en php7.3-fpm) → m’affiche le code - sans colorie syntaxique
    (pourtant sur .phpsRequire all denied)
  • ww2 (IPv6 only en php8.2-fpm) → accès denied
    (pourtant sur .phpsRequire all granted)

CF les configurations dans les 2 fichiers du dessus : php7.3-fpm.conf php8.2-fpm.conf sur « ww1 » et « ww2 » réciproquement.

→ T’es sûr ton FilesMatch, il fonctionne « poto » ?
Pourtant FilesMatch « tout ou/et n’importe quoi » .phps çà me paraît bien.

Moi, j’ai mis çà pour lb2.ww2 en php8.2-frm

    # MY TEST FOR PHP SOURCE
    <FilesMatch ".+\.phps$">
        Require all granted
        SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost"
#        SetHandler "proxy:unix:/run/php/php8.2-fpm.sock"
#       SetHandler "proxy:fcgi://localhost"
    </FilesMatch>

Je devrais voir le code, déjà.

Si je vire mon « MY TEST FOR PHP SOURCE » avec la configuration « ww2 » par default je vois bien mon code (SEULEMENT dans Chrome) sur « ww2 » et « ww1 » :

    <FilesMatch ".+\.phps$">
        # Deny access to raw php sources by default
        # To re-enable it's recommended to enable access to the files
        # only in specific virtual host or directory
        Require all denied
    </FilesMatch>

:face_with_raised_eyebrow:

Dans Firefox le PHPSource sur « ww1 » et « ww2 » :confused:

image


Pour extrapoler ; le |fcgi://localhost c’est pour qui ?? le « RemoteCLient » dans « Chrome » ! CF entouré en route plus haut sur les images.

:partying_face:


/!\

    <FilesMatch ".+\.ph(?:ar|p|tml)$">
#        SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost"
       SetHandler "proxy:unix:/run/php/php8.2-fpm.sock"
    </FilesMatch>

Style le « index.php »:

  • Dans « Firefox » çà affiche → tout le code PHP (les sites web) comme la dernière image du dessus.
  • Dans « Chrome » çà affiche → tout le code SOURCE des PHP carrément.

Comme si c’était l’extension PHP Source « .phps »

Je vais attaquer l’autre module, le « fcgi » ; pour analyse.