Hello,
Admettons que j’ai plusieurs sites nginx sur la même hote. J’ai une configuration php-fpm globale, présente dans /etc/php/7.4/fpm/php.ini puis dans /etc/php/7.4/fpm/conf.d.
Maintenant, je rends compte que chaque site hébergé a des besoins différents, et je pensais qu’en faisant un tunning comme il suit dans le fichier nginx pour chaque hote, ça fonctionnerait (exemple ici pour une instance Nextcloud) :
location ~ \.php(?:$|/) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
set $path_info $fastcgi_path_info;
try_files $fastcgi_script_name =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $path_info;
fastcgi_param HTTPS on;
fastcgi_param modHeadersAvailable true; # Avoid sending the security headers twice
fastcgi_param front_controller_active true; # Enable pretty urls
fastcgi_pass php-handler;
fastcgi_param PHP_VALUE "open_basedir=\"/tmp:/usr/share/nginx/html/nextcloud.domaine.org:/sys/class/net/:/usr/bin/clamscan\"
allow_url_fopen=\"On\"
memory_limit=\"2048M\"
opcache.interned_strings_buffer=\"8\"
opcache.max_accelerated_files=\"10000\"
opcache.memory_consumption=\"128\"
opcache.save_comments=\"1\"
opcache.revalidate_freq=\"1\"
disable_functions=\"passthru,system,proc_open,popen,curl_multi_exec,parse_ini_file,show_source\"
";
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
}
Comme vous le voyez, pour ce site spécifique, je ne veux pas de certaines extensions, je veux également limiter la portée de l’openbasedir.
Soit, si maintenant, j’ai ce besoin pour cette instance nginx et que je restart php-fpm + nginx, je m’aperçois que ça fonctionne très bien pour mon hôte. Par contre, si j’ai un setup différent pour un autre site, si je réapplique des modifications dans le fichier de l’host, je m’aperçois que le setup est aléatoirement pris en compte.
Je n’y comprends plus rien…
Nginx permet, dans ses fichiers sites-availables, de faire un setup PHP spécifique pour chaque hote, mais j’ai l’impression qu’il ne sait en prendre en compte qu’un seul à la fois ?!
Je pensais que chaque tuning PHP spécifié pour chaque fichier d’hote ne s’appliquait que dans l’instance de l’hote où il était déclaré.
Donc est-ce que j’ai mal compris la portée de fastcgi_param PHP_VALUE ? Pour moi, chaque déclaration dans une hôte de variable fastcgi_param PHP_VALUE n’avaient comme portées que le contexte dans lequel il est exécuté (monsite1).
Si j’appelle plusieurs fois fastcgi_param PHP_VALUE, dans des fichiers de site nginx différents, sur la même variable, mais avec une valeur différente pour chaque site (prenons openbasedir où ça prendrait un sens évident), il n’y a à chaque fois d’appliqué pour tous les sites qu’une seule et même valeur pour tout le monde, et celle-ci est un peu prise aléatoirement.
Donc quel est l’intéret de fastcgi_param PHP_VALUE si on ne peut l’utiliser que sur une seule et même variable à la fois, pour l’intégralité des sites ?
Autant faire son tunning dans la configuration globale de PHP, non ?
Si Nginx ne comprend qu’une seule valeur à la fois pour une même variable pour l’ensemble des sites hébergés, pourquoi permettre de faire un setup spécifique propre à chaque site, puisqu’au final il n’y a qu’une seule valeur qui sera retenue pour tout le monde ?? A ce moment là, au nginx -t, il devrait brailler à la vérification de la conf, mais là rien.
Est-ce que je fais mal quelque chose ?