Je rencontre un problème sur PHP) où mon application tente d'exécuter un fichier de sauvegarde php et obtient soudainement le code d'erreur HTTP 500. J'ai vérifié les journaux et ce qu'il dit.
[Mar 28 Août 14:17:28 2012] [avertir] [client xxxx] (104) Connexion réinitialisée par un pair: mod_fcgid: erreur de lecture des données du serveur FastCGI, référent: http://example.com/backup /backup.php
[Mar 28 Août 14:17:28 2012] [erreur] [client xxxx] Fin prématurée des en-têtes de script: backup.php, referer: http://example.com/backup/backup .php
Quelqu'un sait comment résoudre ce problème? Je suis vraiment coincé ici et je ne trouve pas de solution sur Internet.
J'espère que tout le monde pourra partager ses connaissances.
Merci. James
J'ai réussi à résoudre ce problème en ajoutant FcgidBusyTimeout. Juste au cas où quelqu'un aurait le même problème avec moi.
Voici mes paramètres sur mon Apache.conf:
<VirtualHost *:80>
.......
<IfModule mod_fcgid.c>
FcgidBusyTimeout 3600
</IfModule>
</VirtualHost>
J'ai eu des erreurs très similaires dans les fichiers journaux Apache2:
(104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server
Premature end of script headers: phpinfo.php
Après avoir vérifié les scripts d'emballage et les paramètres Apache2, j'ai compris que/var/www/n'avait pas les autorisations nécessaires. Ainsi, les scripts FCGId Wrapper ne pouvaient pas du tout être lus.
ls -la /var/www
drwxrws--- 5 www-data www-data 4096 Oct 7 11:17 .
Pour mon scénario chmod -o+rx /var/www
était bien sûr nécessaire, car les utilisateurs SuExec utilisés ne sont pas membres de www-data
_ groupe d’utilisateurs - et ils ne doivent bien sûr pas être membres pour des raisons de sécurité.
si vous voulez installer une PHP version <5.3.0, vous devez remplacer
--enable-cgi
avec:
--enable-fastcgi
dans votre ./configure
déclaration, extrait de la doc de php.net:
--enable-fastcgi
Si cette option est activée, le module CGI sera également construit avec le support de FastCGI. Disponible depuis PHP 4.3.0
À partir de PHP 5.3.0, cet argument n'existe plus et est activé à la place par --enable-cgi. Après la compilation, le ./php-cgi -v
devrait ressembler à ceci:
PHP 5.2.17 (cgi-fcgi) (built: Jul 9 2013 18:28:12)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies
AVIS LE (cgi-fcgi)
Le célèbre script "replace.php" de Moodle peut également générer cette situation. Pour moi, cela a pris des années pour s'exécuter et ensuite échouer avec un message 500 dans le navigateur et également avec le message d'erreur ci-dessus dans mon fichier journal des erreurs Apache.
J'ai suivi @ james-wise answer: FcgidBusy
est décrit de manière lisible dans documentation Apache . J'ai essayé ceci: doublé le temps que Apache donnerait à mon script pour s'exécuter, en insérant la ligne suivante dans /etc/Apache2/mods-available/fcgid.conf
FcgidBusyTimeout 600
Ensuite, j'ai redémarré Apache et essayé de réexécuter mon script replace.php.
Heureusement, cette fois-ci, l'instance de script est arrivée à son terme, ce qui a donc servi de solution.
Dans les versions CentOS, suexec est compilé pour ne fonctionner que dans/var/www. Si vous essayez de définir un objet DocumentRoot ailleurs, vous devez le recompiler. L'erreur dans le journal Apache est la suivante: (104) La connexion est réinitialisée par un autre utilisateur: mod_fcgid: erreur de lecture des données du serveur FastCGI Fin prématurée des en-têtes de script: php5.fcgi
Pas dans ceci interroge le cas des demandeurs mais souvent:
Que signifie l'erreur "fin prématurée des en-têtes de script" ?
Cette erreur signifie que l'appel FCGI a été terminé de manière inattendue.
Dans certains cas, cela signifie que le script "backup.php" s'est bloqué.
Comment régler ceci?
Si le blocage d'un script en était la cause, corrigez-le pour qu'il ne se bloque pas. Ensuite, cette erreur est également corrigée. Pour savoir si et pourquoi un script se bloque, vous devez déboguer il. Par exemple, vous pouvez consulter le journal des erreurs PHP. Les erreurs consignées dans STDERR entrent normalement dans le gestionnaire d’erreurs de la FCGI.
Je suis tombé sur celui-ci lors du débogage d'une erreur liée à virtualmin/Apache.
Dans mon cas, j'utilise virtualmin et j'avais dans le php.ini de ma machine virtuelle safe_mode = On.
Dans le journal des erreurs de ma machine virtuelle, la connexion fcgi était réinitialisée par un pair: mod_fcgid: erreur lors de la lecture des données à partir du serveur FastCGI
J'obtenais dans mon journal d'erreur Apache principal: PHP Erreur fatale: la directive 'safe_mode' n'est plus disponible dans PHP dans Unknown on line 0
Dans mon cas, je définis simplement safe_mode = Off dans mon php.ini et redémarre Apache.
stackoverflow.com/questions/18683177/where-to-start-with-deprecated-directive-safe-mode-on-line-0-in-Apache-error
J'ai eu ce problème et je me suis rendu compte que le fichier cgi-bin/php-fcgi n'avait aucun droit d'exécution.
Il avait le mode 644 alors qu'il devrait avoir le mode 755.
Définir le mode correct était impossible (probablement parce que le fichier était ouvert ou qch), alors j'ai copié ce fichier à partir d'un autre répertoire de domaine où les droits appropriés étaient déjà définis et tout corrigé.
J'ai eu le même problème avec les scripts longs avec les messages d'erreur "Fin prématurée des en-têtes de script: index.php" et "Connexion réinitialisée par un pair: mod_fcgid: erreur lors de la lecture des données du serveur FastCGI" dans error_log. Après des heures de test, cela m'aide (CentOS 6, PHP-FPM 7, Plesk 12.5.30):
éditez le fichier de configuration:
/etc/httpd/conf.d/fcgid.conf
Définir un temps d'exécution plus long. Dans mon cas 600 secondes
créer la nouvelle entrée:
FcgidBusyTimeout 600
adapter les entrées suivantes:
FcgidIOTimeout 600
FcgidConnectTimeout 600
redémarrer httpd:
service httpd restart
Il suffit d'installer php5-cgi dans debian
Sudo apt-get install php5-cgi
en centos
Sudo yum installe php5-cgi
J'ai augmenté le temps d'exécution maximum à 600 secondes de travail effectué!
J'ai eu le même problème avec une solution différente et simple.
J'ai installé PHP 5.6 en suivant la réponse acceptée à cette question sur Ask Ubunt . Après avoir utilisé Virtualmin pour passer d'un serveur virtuel particulier de PHP = 5.5 à PHP 5.6, j'ai reçu une erreur de 500 serveur interne et mes entrées étaient identiques dans le journal des erreurs Apache:
[Tue Jul 03 16:15:22.131051 2018] [fcgid:warn] [pid 24262] (104)Connection reset by peer: [client 10.20.30.40:23700] mod_fcgid: error reading data from FastCGI server
[Tue Jul 03 16:15:22.131101 2018] [core:error] [pid 24262] [client 10.20.30.40:23700] End of script output before headers: index.php
Simple: Je n'ai pas installé le php5.6-cgi
paquet .
L'installation du paquet et le rechargement d'Apache ont résolu le problème:
Sudo apt-get install php5.6-cgi
si vous utilisez PHP 5.6
Sudo apt-get install php5-cgi
si vous utilisez une différente PHP 5 version
Sudo apt-get install php7.0-cgi
si vous utilisez PHP 7
Ensuite, utilisez service Apache2 reload
pour appliquer la configuration.
Vérifiez/var/lib/php/session et ses autorisations. Ce répertoire doit être accessible en écriture à l'utilisateur pour que la session puisse être stockée.
Comme cela a déjà été mentionné, cela pourrait se produire en raison de problèmes d’autorisation du gestionnaire fcgi. Si vous utilisez suexec, n'oubliez pas de vérifier si Apache a ce module activé.
Dans mon cas, j'utilisais une extension personnalisée pour mes fichiers PHP et je devais éditer /etc/Apache2/conf-available/php7.2-fpm.conf
et ajoutez le code suivant:
<FilesMatch ".+\.YOUR_CUSTOM_EXTENSION$">
SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost"
</FilesMatch>
Si vous êtes sur un serveur partagé comme moi, l'hôte a déclaré que cela résultait de la limitation de la mémoire. Ils tuent donc les scripts, ce qui entraîne la "fin prématurée des en-têtes de script" dans cette erreur. Ils m'ont référé à ceci:
Compte tenu d'une augmentation de la mémoire, les problèmes ont disparu. Je pense qu'un plugin de sauvegarde Updraft sur wordpress était peut-être trop zélé dans ses fonctions/paramètres.