1 votes

Rechargement de PHP5-FPM depuis un navigateur web : Erreur de serveur interne 500

Je crée un service d'hébergement partagé gratuit pour le plaisir et l'apprentissage. J'ai fait un formulaire simple où l'utilisateur entre le sous-domaine et le mot de passe ftp. Lorsque l'utilisateur appuie sur soumettre, un script génère un utilisateur linux, crypte le mot de passe saisi avec crypt() puis envoie les données à un script linux. Voici la mauvaise partie du script complet :

echo "[$1]
user = $1
group = $1
listen = /var/run/sock_$1.sock
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
php_value[disable_functions] = \"phpinfo, system, exec, shell_exec, passthru , ini_alter, dl, pfsockopen, openlog, syslog, readlink, symlink, link, leak, fsockopen, popen, escapeshellcmd, apache_child_terminate apache_get_modules, apache_get_version, apache_getenv, apache_note,apache_setenv,virtual\"
php_value[open_basedir] = \"/home/$1:/home/$1/tmp\"" | sudo /usr/bin/tee /etc/php5/fpm/pool.d/$1.conf;

sudo /usr/sbin/service php5-fpm reload;

Comme vous pouvez le voir, il crée un pool PHP-FPM puis recharge le service. Lorsque je crée manuellement le pool et que je recharge manuellement FPM, cela fonctionne bien, le nouveau site web se charge sans problème. Le problème que j'ai remarqué est que si je commente la ligne de rechargement, le pool est créé et il n'y a pas de problème d'écriture de fichier mais de rechargement.

Ainsi, lorsque je soumets le message avec toutes les données, il y a une erreur de serveur interne 500.

Journal d'Apache :

[Thu Aug 08 01:43:44 2013] [error] [client xxx.xxx.xxx.xxx] (104)Connection reset by peer: FastCGI: comm with server "/vhost_asd_tld" aborted: read failed, referer: http://asd.tld/
[Thu Aug 08 01:43:44 2013] [error] [client xxx.xxx.xxx.xxx] FastCGI: incomplete headers (0 bytes) received from server "/vhost_asd_tld", referer: http://asd.tld/

Le pool asd.tld :

[asd_tld]
user = asd_tld
group = asd_tld
listen = /var/run/sock_asd_tld.sock
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

Le serveur virtuel asd.tld :

<VirtualHost *:80>
ServerAdmin asd@asd.tld
ServerName asd.tld
DocumentRoot /var/www
<Directory /var/www>  
  AllowOverride All
  Order Allow,Deny
  Allow from all
</Directory>
ErrorLog "/var/www/log/asd.tld-error.log"
CustomLog "/var/www/log/asd.tld-access.log" combined
CustomLog "/var/www/log/asd.tld-bandwidth.log" common
<IfModule mod_fastcgi.c>
  <FilesMatch \.php$>
    SetHandler php-script
  </FilesMatch>
  Action php-script /php5-fpm-handler
  Alias /php5-fpm-handler /vhost_asd_tld
  FastCGIExternalServer /vhost_asd_tld -socket /var/run/sock_asd_tld.sock
</IfModule>
</VirtualHost>

Système d'exploitation : Ubuntu Desktop 13.04

Des idées ? Merci d'avance !

1voto

Michael Hampton Points 232226

Le rechargement de php-fpm interrompt les connexions actives, comme la vôtre dans cette circonstance. Dans la mesure du possible, évitez de le faire, ou si vous ne pouvez pas, faites-le de manière asynchrone, après avoir terminé d'envoyer les données au navigateur.

0 votes

Merci de l'avoir clarifié ! Que voulez-vous dire exactement par "asynchrone" ? Si j'ai bien compris, je devrais le mettre dans un nouveau travail avec "at" par exemple, et si c'est fait, il devrait en informer l'utilisateur ?

0 votes

Il y a de nombreuses façons de le faire ; ce n'est que l'une d'entre elles :)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X