понедельник, 23 февраля 2015 г.

Будьте внимательны при апгрейде Nginx + PHP-fpm в Debian Jessie

При обновлении хоста с Debian Jessie столкнулся с полностью нерабочими PHP сайтами после завершения апгрейда сервера. На любой запрос php скрипта веб-сервер просто отвечает HTTP 200 и отдает пустую страницу. Никаких ошибок в логе Nginx не было.

Сайты содержали следующий кусок конфига:

location ~ \.php$ {

  # skipped lines

  fastcgi_pass unix:/var/run/php5-fpm.sock;
  fastcgi_index index.php;
  include fastcgi_params;
}

В процессе дебага выяснилось, что из файла /etc/nginx/fastcgi_params выкинули объявление параметра SCRIPT_FILENAME и из-за этого интерпретатору срывает крышу. Случилось это в районе версии 1.6.1-2:

  * debian/conf/fastcgi_params:
    + Sync with upstream and remove `SCRIPT_FILENAME` parameter.
      This change might break fastcgi sites. (Closes: #718639)
  + debian/conf/fastcgi.conf:
    + Ship upstream file.

Теперь в Nginx включен пример конфигурации для PHP-fpm (/etc/nginx/snippets/fastcgi-php.conf)

# regex to split $uri to $fastcgi_script_name and $fastcgi_path
fastcgi_split_path_info ^(.+\.php)(/.+)$;

# Check that the PHP script exists before passing it
try_files $fastcgi_script_name =404;

# Bypass the fact that try_files resets $fastcgi_path_info
# see: http://trac.nginx.org/nginx/ticket/321
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;

fastcgi_index index.php;
include fastcgi.conf;

P.S. Особая благодарность создателям socat - он мой новый лучший друг в вопросах отладки. Достаточно запустить

socat -v UNIX-LISTEN:/tmp/php5-debug.sock UNIX-CONNECT:/var/run/php5-fpm.sock

и перенастроить Nginx на подключение к /tmp/php5-debug.sock, как становится виден процесс общения Nginx и PHP-fpm, а соответственно и суть проблемы.

4 комментария:

  1. Добрый день
    столкнулся с такой же , как у вас проблемой, socat показал ответ от php-fpm... пробовал как у вас, но мне помогло установка локалей.
    debian 8.2

    ОтветитьУдалить
  2. у меня тоже было такое. в итоге гугл подсказал как решить проблему. за socat спасибо обязательно попробую

    ОтветитьУдалить
  3. Здравствуйте, подскажите как решить такую же проблему. Сайт сделан на платформе джумла 3, с использованием готового шаблона https://www.templatemonster.com/ru/opencart-templates-type/, в код не лез, поэтому накосячить не мог, по крайней мере мне так кажется. Ничего не обновлял, просто залил сайт выдает пустую страницу, третий день бьюсь на проблемой ничего решить не могу

    ОтветитьУдалить
    Ответы
    1. Смотрите какой код возвращает вебсервер (200, 500, 503) и проверяйте лог ошибок вебсервера и PHP.

      Удалить