Назад | Перейти на главную страницу

Php игнорирует ограничения на загрузку файлов

Я запускаю экземпляр книжного стога на php под nginx.

К сожалению, я не могу загрузить файлы размером более 2M. И это моя проблема на сегодня.

Попытка загрузки файла приводит к HTTP/1.1 422 Unprocessable Entity с телом {file: ["The file could not be uploaded. The server may not accept files of this size."]}.

В документации Bookstack сказано, что достаточно установить ограничения на размер файла как в nginx, так и в php (на самом деле в нем также упоминается некоторая настройка во внешнем интерфейсе, но, поскольку у нас есть ошибка HTTP, оставим это за рамками). Никаких настроек в бэкэнде книжного стека не требуется.

php config (а установлена ​​только одна версия):

cat /etc/php/7.0/fpm/php.ini | egrep 'upload_max_filesize|post_max_size'

post_max_size = 28M  
upload_max_filesize = 28M

Конфигурация nginx:

cat /etc/nginx/sites-available/bookstack

server {  
    listen      80;
    server_name ****;
    return 301 https://****;
}  

server {  
    listen               443 ssl;
    server_name          ****;
    ssl_certificate      /etc/ssl/certs/***.crt;
    ssl_certificate_key  /etc/ssl/private/***.key;
    ssl_protocols        TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers          HIGH:!aNULL:!MD5;

    root ***;
    client_max_body_size 28m;
    client_body_timeout 60;

    location / {
        try_files $uri /index.php?$query_string;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
    }
}

Я добавил этот файл в public каталог:

<?php
echo phpinfo();
?>

Который дает:

Версия PHP 7.0.33-0ubuntu0.16.04.7
...
Серверный API FPM / FastCGI
...
Файл конфигурации (php.ini) Путь /etc/php/7.0/fpm
Загруженный файл конфигурации /etc/php/7.0/fpm/php.ini
...
post_max_size 16M
upload_max_filesize 2M

Итак, он использует правильный php.ini файл, но игнорирует его содержимое?

А теперь самое интересное!

Я также обнаружил, что конфигурация верна сразу после sudo service php7.0-fpm restart:

post_max_size 28M
upload_max_filesize 28M

... но всего на пару секунд. Через одну или две секунды он снова вернется к 2M. И загрузка файлов действительно работает в эти секунды (но требует большой ловкости ...).

В соответствии с service php7.0-fpm status выходных данных, основной процесс обслуживания не перезапускается в течение этого периода, а PID рабочего процесса остаются неизменными.

Кроме того, включение catch_workers_output = yes в www.conf не добавляет ничего полезного в журнал fpm.

Как я могу продлить лимит загрузки файлов на период более двух секунд?
Думаю, я мог бы просто перезапускать php-fpm каждые две секунды, но это даже не смешно.
Есть ли более надежный способ решить проблему?

в /etc/nginx/nginx.conf изменить / добавить в блок http

client_max_body_size 28m;

Вам также нужно будет изменить свой файл pho.ini.

У меня запущено 2 экземпляра книжных стеков, один на apache и один на nginx, оба на php 7.2. Как ни странно, мой nginx в порядке, но сегодня я обнаружил, что мой экземпляр apache также имеет эту ошибку.

Мне удалось исправить ошибку, скопировав свои настройки (post_max_size и upload_max_filesize, 200М для обоих) от /etc/php/7.2/fpm/php.ini к /etc/php/7.2/apache2/php.ini. Поскольку вы работаете на nginx, я не уверен, что это поможет вам, но, по крайней мере, стоит попробовать.