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
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à
Note de Moi-même le 2025/01/24 à 8h30 :
J’ajoute ce lien au sujet : Rewrite Server Web Apache - #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 :
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 .phps
→ Require all denied
)
- ww2 (IPv6 only en php8.2-fpm) → accès denied
(pourtant sur .phps
→ Require all granted
)
Dans Chrome/132.0.0.0 :
- ww1 (IPv6 only en php7.3-fpm) → m’affiche le code - sans colorie syntaxique
(pourtant sur .phps
→ Require all denied
)
- ww2 (IPv6 only en php8.2-fpm) → accès denied
(pourtant sur .phps
→ Require 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>
Dans Firefox le PHPSource sur « ww1 » et « ww2 »
Pour extrapoler ; le |fcgi://localhost
c’est pour qui ?? le « RemoteCLient » dans « Chrome » ! CF entouré en route plus haut sur les images.
/!\
<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, du style « complétement dégueulasse, ce n’est pas « exactement » le code textuel PHP ».
- Dans « Chrome » çà affiche → tout le code SOURCE des PHP carrément.
Comme si c’était l’extension PHP Source « .phps » -
Sarteck le proxy PHP-FPM il lit le fichier … texte PHP Mais que dans Chrome ; au fait.
Vraiment, y’a des « choses » que je ne comprends pas.
Je vais attaquer l’autre module, le « fcgi » ; pour analyse.
Donc, déjà, j’ai pas la « même configuration » entre mes 2 « backends » « ww1 » et « ww2 » (on va dire ce n’est pas grave, çà tombe bien) :
WW1 files Apache sur Debian GNU/Linux 10 (buster)
root@lb1.ww1:~ # ls -l /etc/apache2/mods-enabled/
[...]
lrwxrwxrwx 1 root root 26 juil. 19 2020 cgi.load -> ../mods-available/cgi.load
[...]
lrwxrwxrwx 1 root root 28 avril 26 2020 http2.conf -> ../mods-available/http2.conf
lrwxrwxrwx 1 root root 28 avril 26 2020 http2.load -> ../mods-available/http2.load
[...]
lrwxrwxrwx 1 root root 32 janv. 22 07:52 mpm_event.conf -> ../mods-available/mpm_event.conf
lrwxrwxrwx 1 root root 32 janv. 22 07:52 mpm_event.load -> ../mods-available/mpm_event.load
[...]
lrwxrwxrwx 1 root root 28 avril 26 2020 proxy.conf -> ../mods-available/proxy.conf
lrwxrwxrwx 1 root root 33 janv. 22 07:50 proxy_fcgi.load -> ../mods-available/proxy_fcgi.load
lrwxrwxrwx 1 root root 28 avril 26 2020 proxy.load -> ../mods-available/proxy.load
[...]
lrwxrwxrwx 1 root root 31 avril 15 2020 setenvif.conf -> ../mods-available/setenvif.conf
lrwxrwxrwx 1 root root 31 avril 15 2020 setenvif.load -> ../mods-available/setenvif.load
[...]
root@lb1.ww1:~ # cat /etc/apache2/mods-enabled/http2.conf
# mod_http2 doesn't work with mpm_prefork
<IfModule !mpm_prefork>
Protocols h2 h2c http/1.1
# # HTTP/2 push configuration
#
# H2Push on
#
# # Default Priority Rule
#
# H2PushPriority * After 16
#
# # More complex ruleset:
#
# H2PushPriority * after
# H2PushPriority text/css before
# H2PushPriority image/jpeg after 32
# H2PushPriority image/png after 32
# H2PushPriority application/javascript interleaved
#
# # Configure some stylesheet and script to be pushed by the webserver
#
# <FilesMatch "\.html$">
# Header add Link "</style.css>; rel=preload; as=style"
# Header add Link "</script.js>; rel=preload; as=script"
# </FilesMatch>
# Since mod_http2 doesn't support the mod_logio module (which provide the %O format),
# you may want to change your LogFormat directive as follow:
#
# LogFormat "%v:%p %h %l %u %t \"%r\" %>s %B \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
# LogFormat "%h %l %u %t \"%r\" %>s %B \"%{Referer}i\" \"%{User-Agent}i\"" combined
# LogFormat "%h %l %u %t \"%r\" %>s %B" common
</IfModule>
root@lb1.ww1:~ # cat /etc/apache2/mods-enabled/proxy_fcgi.load
# Depends: proxy
LoadModule proxy_fcgi_module /usr/lib/apache2/modules/mod_proxy_fcgi.so
root@lb1.ww1:~ # cat /etc/apache2/conf-enabled/serve-cgi-bin.conf
<IfModule mod_alias.c>
<IfModule mod_cgi.c>
Define ENABLE_USR_LIB_CGI_BIN
</IfModule>
<IfModule mod_cgid.c>
Define ENABLE_USR_LIB_CGI_BIN
</IfModule>
<IfDefine ENABLE_USR_LIB_CGI_BIN>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Require all granted
</Directory>
</IfDefine>
</IfModule>
root@lb1.ww1:~ # cat /etc/apache2/mods-enabled/setenvif.conf
<IfModule mod_setenvif.c>
#
# The following directives modify normal HTTP response behavior to
# handle known problems with browser implementations.
#
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0
#
# The following directive disables redirects on non-GET requests for
# a directory that does not include the trailing slash. This fixes a
# problem with Microsoft WebFolders which does not appropriately handle
# redirects for folders with DAV methods.
# Same deal with Apple's DAV filesystem and Gnome VFS support for DAV.
#
BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
BrowserMatch "MS FrontPage" redirect-carefully
BrowserMatch "^WebDrive" redirect-carefully
BrowserMatch "^WebDAVFS/1.[012]" redirect-carefully
BrowserMatch "^gnome-vfs/1.0" redirect-carefully
BrowserMatch "^gvfs/1" redirect-carefully
BrowserMatch "^XML Spy" redirect-carefully
BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully
BrowserMatch " Konqueror/4" redirect-carefully
</IfModule>
WW2 files Apache sur Debian GNU/Linux 12 (bookworm)
root@lb2.ww2:~ # ll /etc/apache2/mods-enabled/
[...]
lrwxrwxrwx 1 root root 26 Aug 30 2023 /etc/apache2/mods-enabled/cgi.load -> ../mods-available/cgi.load
[...]
lrwxrwxrwx 1 root root 28 Jan 24 09:13 fcgid.conf -> ../mods-available/fcgid.conf
lrwxrwxrwx 1 root root 28 Jan 24 09:13 fcgid.load -> ../mods-available/fcgid.load
lrwxrwxrwx 1 root root 28 Aug 30 2023 http2.conf -> ../mods-available/http2.conf
lrwxrwxrwx 1 root root 28 Aug 30 2023 http2.load -> ../mods-available/http2.load
lrwxrwxrwx 1 root root 32 Jan 22 07:52 mpm_event.conf -> ../mods-available/mpm_event.conf
lrwxrwxrwx 1 root root 32 Jan 22 07:52 mpm_event.load -> ../mods-available/mpm_event.load
lrwxrwxrwx 1 root root 28 Jan 22 07:51 proxy.conf -> ../mods-available/proxy.conf
lrwxrwxrwx 1 root root 33 Jan 22 07:51 proxy_fcgi.load -> ../mods-available/proxy_fcgi.load
lrwxrwxrwx 1 root root 28 Jan 22 07:51 proxy.load -> ../mods-available/proxy.load
[...]
lrwxrwxrwx 1 root root 31 Aug 30 2023 setenvif.conf -> ../mods-available/setenvif.conf
lrwxrwxrwx 1 root root 31 Aug 30 2023 setenvif.load -> ../mods-available/setenvif.load
[...]
root@lb2.ww2:~ # cat /etc/apache2/mods-enabled/http2.conf
Protocols h2 h2c http/1.1
# # HTTP/2 push configuration
#
# H2Push on
#
# # Default Priority Rule
#
# H2PushPriority * After 16
#
# # More complex ruleset:
#
# H2PushPriority * after
# H2PushPriority text/css before
# H2PushPriority image/jpeg after 32
# H2PushPriority image/png after 32
# H2PushPriority application/javascript interleaved
#
# # Configure some stylesheet and script to be pushed by the webserver
#
# <FilesMatch "\.html$">
# Header add Link "</style.css>; rel=preload; as=style"
# Header add Link "</script.js>; rel=preload; as=script"
# </FilesMatch>
# Since mod_http2 doesn't support the mod_logio module (which provide the %O format),
# you may want to change your LogFormat directive as follow:
#
# LogFormat "%v:%p %h %l %u %t \"%r\" %>s %B \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
# LogFormat "%h %l %u %t \"%r\" %>s %B \"%{Referer}i\" \"%{User-Agent}i\"" combined
# LogFormat "%h %l %u %t \"%r\" %>s %B" common
root@lb2.ww2:~ # cat /etc/apache2/mods-enabled/proxy_fcgi.load
# Depends: proxy
LoadModule proxy_fcgi_module /usr/lib/apache2/modules/mod_proxy_fcgi.so
root@lb2.ww2:~ # cat /etc/apache2/mods-available/fcgid.conf
<IfModule mod_fcgid.c>
FcgidConnectTimeout 20
<IfModule mod_mime.c>
AddHandler fcgid-script .fcgi
</IfModule>
</IfModule>
root@lb2.ww2:~ # cat /etc/apache2/conf-enabled/serve-cgi-bin.conf
<IfModule mod_alias.c>
<IfModule mod_cgi.c>
Define ENABLE_USR_LIB_CGI_BIN
</IfModule>
<IfModule mod_cgid.c>
Define ENABLE_USR_LIB_CGI_BIN
</IfModule>
<IfDefine ENABLE_USR_LIB_CGI_BIN>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Require all granted
</Directory>
</IfDefine>
</IfModule>
root@lb2.ww2:~ # cat /etc/apache2/mods-enabled/setenvif.conf
#
# The following directives modify normal HTTP response behavior to
# handle known problems with browser implementations.
#
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0
#
# The following directive disables redirects on non-GET requests for
# a directory that does not include the trailing slash. This fixes a
# problem with Microsoft WebFolders which does not appropriately handle
# redirects for folders with DAV methods.
# Same deal with Apple's DAV filesystem and Gnome VFS support for DAV.
#
BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
BrowserMatch "MS FrontPage" redirect-carefully
BrowserMatch "^WebDrive" redirect-carefully
BrowserMatch "^WebDAVFS/1\.[012]" redirect-carefully
BrowserMatch "^gnome-vfs/1\.0" redirect-carefully
BrowserMatch "^gvfs/1" redirect-carefully
BrowserMatch "^XML Spy" redirect-carefully
BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully
BrowserMatch " Konqueror/4" redirect-carefully
Donc, « WW1 » fonctionne sans :
lrwxrwxrwx 1 root root 28 Jan 24 09:13 fcgid.conf -> ../mods-available/fcgid.conf
lrwxrwxrwx 1 root root 28 Jan 24 09:13 fcgid.load -> ../mods-available/fcgid.load
Cà à l’air sympat, mais je ne comprend pas…
En passant, j’ai désactivé ce matin 8h00 les 3 frontaux que j’avais activité sur mon nom de domaine et avec « www » pour le « .fr » → https://www.zw3b.fr - parce que je n’en peut plus - rien qui fonctionne ; du coup le site fonctionne « normalement ».
ven. janv. 24 14:32:11 root@home.lb1.ww1:~ # host zw3b.fr
zw3b.fr has address 158.69.126.137
zw3b.fr has IPv6 address 2607:5300:60:9389::1
zw3b.fr mail is handled by 10 smtp.zw3b.fr.
ven. janv. 24 14:58:03 root@home.lb1.ww1:~ # host zw3b.eu
zw3b.eu has address 158.69.126.137
zw3b.eu has address 90.5.102.244
zw3b.eu has address 57.128.171.43
zw3b.eu has address 135.125.133.51
zw3b.eu has IPv6 address 2607:5300:60:9389::1
zw3b.eu has IPv6 address 2001:41d0:701:1100::6530
zw3b.eu has IPv6 address 2001:41d0:801:2000::44f9
zw3b.eu has IPv6 address 2a01:cb1d:5:af00::1
zw3b.eu mail is handled by 10 smtp.zw3b.eu.
Du coup, je n’ai plus/pas d’erreur de « proxy » … et en plus je ne voyais jamais arriver les requetes dans les logs ; sur les frontaux « quand j’avais un Proxy Error » que la page tournée en boucle dans l’onglet de mmon navigateur… avec les 4 frontaux…
Dans le style je suis grave
J’ajoute celle-ci parce que External ou pas Eternal ? mais la question est "External ou pas mais vers où ?
Difference between FastCgiExternalServer and FastCgiServer in Apache FastCGI PHP?
FastCgiServer est un serveur pour lequel mod_fastcgi effectuera la gestion des processus, en faisant tourner les instances et en leur donnant un socket de domaine Unix sur lequel écouter. Aucune action extérieure n’est requise pour démarrer le serveur fastcgi.
FastCgiExternalServer est un serveur pour lequel mod_fastcgi n’effectuera aucune gestion des processus, il se contentera d’atteindre le socket Unix ou TCP que vous lui indiquez d’utiliser et de lui transmettre les requêtes/réponses. Vous, ou un démon extérieur à httpd, devez démarrer quelque chose pour écouter sur le socket répertorié. La méthode la plus basique est l’utilitaire ‹ fcgistarter ›, les autres options sont des choses comme php-fpm.
Ce n’est pas exactement de la promo, c’est plutôt de l’anti-promo… vous suivez rien !
C’est un métier tout çà : je vais donc attaquer çà → mod_proxy_fcgi - Serveur HTTP Apache Version 2.4