LINUX.ORG.RU
ФорумAdmin

Nginx обрезает ответ от php-fpm

 ,


0

2

Добрый день.

Есть стандартная связка Nginx + php-fpm. Не могу понять странности поведения Nginx: ответ от php-fpm обрезается до некоего незначительного размера и не отдаётся полностью. При том, что сам fpm отрабатывает корректно, никаких ошибок в логах PHP нет. Обрезается даже вывод функции phpinfo().

Размер отдаваемого ответа кратен 16кб: по-началу был 16 или 32, однако после добавления нижеследующих строк в конфигурацию хоста, размер ответа стал ограничиваться 256 или 512кб (от запроса к запросу размер варьируется).

    fastcgi_buffer_size 256k;
    fastcgi_buffers 256 16k;

Для сравнения положил рядом два файла в 10 мегабайт, заполненные нулл-байтом: file.txt и file.php. Первый отдаётся полностью, второй — обрезается.

Полный листинг конфигурации хоста:

server {
  listen 80;

  server_name domain.com;
  root /var/www/domain.com/www;

  error_log /var/www/domain.com/logs/error.log;

  charset utf-8;
  index index.php;

  location ~* \.php$ {
    fastcgi_index   index.php;
    fastcgi_pass    127.0.0.1:9000;

    fastcgi_buffer_size 256k;
    fastcgi_buffers 256 16k;

    include         fastcgi_params;
    fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
  }
}
и nginx.conf:
user              nobody;
worker_processes  12;

error_log  /var/log/nginx/error.log;
#error_log  /var/log/nginx/error.log  notice;
#error_log  /var/log/nginx/error.log  info;

pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include	  /etc/nginx/mime.types;
    default_type  application/octet-stream;

    server_names_hash_max_size 1024;
    server_names_hash_bucket_size 1024;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    include /etc/nginx/conf.d/*.conf;
}
Посдкажите, в чём может быть проблема?

никаких ошибок в логах PHP нет.

А в error.log nginx'a ? Вот тут: /var/www/domain.com/logs/error.log, судя по конфигу.

fjoe
()

Проверь, доступна ли запись для nobody в /var/tmp/nginx, /var/lib/nginx, ну или куда там nginx гадит в твоем дистрибутиве.

gwinn ★★★★
()

Полагаю, дело всё же в настройках хоста. Попробуй увеличить буферы, а также явно прописать fastcgi_send_timeout, fastcgi_read_timeout, fastcgi_temp_file_write_size и т.д.

Ну и включить fastcgi_intercept_errors, может что-нибудь прояснится.

Apple-ch ★★
()
Ответ на: комментарий от KtoZdes

Спасибо большое, проблема была именно в этом :)

Может всётаки подскажешь название своего дистра? (Чтобы иметь ввиду)

anonymous
()
Ответ на: комментарий от anonymous

От дистра будет зависеть только расположение директорий временных файлов, проблему воспроизвести можно почти везде. Я только на Slackware с ней не сталкивался, а так и Fedora с Ubuntu, и Centos c Debian болеют.

gwinn ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.