Не работает режим PHP FastCGI: Premature end of script headers

Создана:

2016-11-16 13:18:18 UTC

Изменена:

2017-08-16 16:28:46 UTC

8

Помогла ли вам статья?


Есть вопросы?

Отправить запрос

Не работает режим PHP FastCGI: Premature end of script headers

Applicable to:

  • Plesk 12.5 for Linux
  • Plesk Onyx for Linux
  • Plesk 11.x for Linux
  • Plesk 12.0 for Linux

Симптомы

  1. Дополнительный PHP не работает при переключении режима PHP на 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

    или

    [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. В журнале Apache можно увидеть такие ошибки памяти:

    # 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 можно увидеть уведомления 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. В журнале Suexec можно увидеть такую ошибку:

    # tailf /var/log/httpd/suexec_log

    uid: (10033/ftpuser) gid: (504/504) cmd: cgi_wrapper
    unknown error in docroot check (10033)

Причина

  1. PHP скомпилирован без поддержки FastCGI.

  2. На сервере недостаточно памяти.

  3. Файл php.ini домена изменен, содержит опечатки или неверные настройки.

  4. Неверно настроены права для файла /etc/passwd .

  5. Проблема совместимости отдельного модуля PHP.

Решение

  1. Удостоверьтесь в том, чтобы PHP был скомпилирован с поддержкой FastCGI. Можно использовать следующую команду, чтобы проверить, включен ли модуль fastcgi.

    # /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

    Проверьте версию 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

    Как видим, используется 5.2.17 (cgi). Это означает, что PHP работает только в режиме CGI. PHP, работающий в режиме как CGI, так и FastCGI, выглядит следующим образом:

    # 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.

    Если PHP скомпилирован без поддержки режима FastCGI, пожалуйста, перекомпилируйте индивидуальный модуль php с опцией --enable-fastcgi .

  2. Удостоверьтесь в том, что на сервере достаточно места, с помощью следующей команды:

    # free -m

    Если сервер является виртуальным контейнером, можно проверить ограничения на ресурсы с помощью следующей команды:

    # cat /proc/user_beancounters
  3. Файл php.ini домена может быть изменен вручную или содержать ошибку. Например, мегабайты могут быть указаны в файле php.ini как 128MB вместо 128M.

    Сохраните резервную копию оригинального файла php.ini домена и перенастройте домен:

     # mv  /var/www/vhosts/system/domain.tld/etc/php.ini /var/www/vhosts/system/domain.tld/etc/php.ini_orig

    # /usr/local/psa/admin/bin/httpdmng --reconfigure-vhost --vhost-name=domain.tld

    Для Plesk 11.5 и выше, используйте следующую команду:

     # /usr/local/psa/admin/bin/httpdmng --reconfigure-domain --domain-name=domain.tld
  4. Удостоверьтесь в том, что права для файла /etc/passwd выглядят следующим образом:

    # ls -la /etc/passwd
    -rw-r--r-- 1 root root 7643 Mar 3 12:54 /etc/passwd
Была ли эта статья полезной?
Пользователи, считающие этот материал полезным: 8 из 47
Еще есть вопросы? Отправить запрос
Войдите в службу, чтобы оставить комментарий.