El modo FastCGI de PHP no funciona debido al error "Premature end of script headers"

Created:

2016-11-16 13:18:18 UTC

Modified:

2017-08-16 16:28:46 UTC

8

Was this article helpful?


Have more questions?

Enviar una solicitud

El modo FastCGI de PHP no funciona debido al error "Premature end of script headers"

Aplicable a:

  • Plesk 12.5 para Linux
  • Plesk Onyx para Linux
  • Plesk 11.0 para Linux
  • Plesk 11.5 para Linux
  • Plesk 12.0 para Linux

Síntomas

  1. Un PHP secundario no funciona mientras se cambia el modo PHP a FastCGI:

    # tailf /var/www/vhosts/domain.tld/logs/error_log
    (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server
    Premature end of script headers: index.php

    O bien:

    [fcgid:warn] [pid 1175:tid 140298957072128] (104)Connection reset by peer: [client xx.xx.xx.xx:50320] mod_fcgid: error reading data from FastCGI server
    [core:error] [pid 1175:tid 140298957072128] [client xx.xx.xx.xx:50320] End of script output before headers: index.php
    [fcgid:warn] [pid 1174:tid 140298982250240] (104)Connection reset by peer: [client xx.xx.xx.xx:50324] mod_fcgid: error reading data from FastCG
  2. En los registros de Apache puede verse un error de memoria:

    # less /etc/httpd/logs/error_log
    Apache/2.2.15 (Unix) DAV/2 mod_fcgid/2.3.7 mod_python/3.3.1 Python/2.6.6 mod_ssl/2.2.15 OpenSSL/1.0.0-fips SVN/1.6.11 mod_perl/2.0.4 Perl/v5.10.1 configured -- resuming normal operations
    [Errno 12] Cannot allocate memory
  3. Syslog muestra alertas suhosin:

    # less /var/log/syslog
    hosting suhosin[32242]: ALERT - zend_mm_head corrupted at 0x2e02420 (attacker '203.0.113.2', file '/var/www/vhosts/example.com/httpdocs/index.php')
  4. El registro Suexec muestra un error:

    # tailf /var/log/httpd/suexec_log
    uid: (10033/ftpuser) gid: (504/504) cmd: cgi_wrapper
    unknown error in docroot check (10033)

Causa

  1. PHP no se compila con FastCGI.

  2. El servidor no dispone de suficiente memoria.

  3. El dominio php.ini está personalizado, contiene errores con erratas o presenta una configuración que no es válida.

  4. Los permisos sobre el archivo /etc/passwd no son correctos.

  5. Existe un problema relacionado con la compatibilidad de un módulo PHP.

Resolución

  1. Conéctese al servidor mediante SSH y compruebe que PHP se compila con FastCGI. Puede ejecutar el siguiente comando para comprobar si el módulo fastcgi está activado o no:

    # /usr/local/psa/admin/bin/php_handlers_control --list
    id: display name: version: type: cgi-bin: php.ini:
    fastcgi-5.2.17 5.2.17 5.2.17 cgi /usr/local/php5.2.17/bin/php-cgi /usr/local/lib/php.ini

    Compruebe la versión de PHP:

    # /usr/local/php5.2.17-cgi/bin/php-cgi -v
    PHP 5.2.17 (cgi) (built: Mar 27 2014 20:28:44)
    Copyright (c) 1997-2010 The PHP Group
    Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies

    Como puede ver, se usa 5.2.17 (cgi). Esto significa que PHP sólo opera en modo CGI. Si PHP funcionara en modos CGI y FastCGI, este tendría la siguiente apariencia:

    # php-cgi -v
    PHP 5.3.3 (cgi-fcgi) (built: Jul 12 2013 20:34:01)
    Copyright (c) 1997-2010 The PHP Group
    Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
    with the ionCube PHP Loader v4.2.2, Copyright (c) 2002-2012, by ionCube Ltd.

    Si PHP no se compila con el modo FastCGI, vuelva a compilar el PHP personalizado con la opción --enable-fastcgi .

  2. Compruebe que el servidor dispone de suficiente memoria ejecutando el siguiente comando:

    # free -m

    Si el servidor es un contenedor virtual, puede comprobar los límites de recursos con el siguiente comando:

    # cat /proc/user_beancounters
  3. El dominio php.ini puede haberse personalizado de forma manual o bien contener un error. Por ejemplo: megabytes definidos en php.ini como 128MB en vez de 128M.

    Cree un backup del dominio original php.ini y vuelva a configurar un dominio:

     # mv /var/www/vhosts/system/example.com/etc/php.ini /var/www/vhosts/system/example.com/etc/php.ini_orig

    # /usr/local/psa/admin/bin/httpdmng --reconfigure-vhost --vhost-name=example.com

    En el caso de Plesk 11.5 y versiones posteriores, ejecute el siguiente comando:

     # /usr/local/psa/admin/bin/httpdmng --reconfigure-domain --domain-name=example.com
  4. Compruebe que los permisos para el archivo /etc/passwd son iguales a los siguientes:

    # ls -la /etc/passwd
    -rw-r--r-- 1 root root 7643 Mar 3 12:54 /etc/passwd
¿Tiene más preguntas? Enviar una solicitud
Inicie sesión para dejar un comentario.