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

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

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

Попытка загрузки файла приводит к HTTP/1.1 422 Unprocessable Entity с телом {file: ["Файл не может быть загружен. Сервер может не принимать файлы такого размера."]}.

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

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 config:

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 Version 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 каждые две секунды, но это даже не смешно, на самом деле.
Есть ли более надежный способ решить эту проблему?

2
задан 5 December 2019 в 03:42
2 ответа

У меня запущено 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, я не уверен, что это поможет вам, но, по крайней мере, стоит попробовать.

1
ответ дан 17 February 2020 в 18:28

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

client_max_body_size 28m;

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

1
ответ дан 18 February 2020 в 00:37

Теги

Похожие вопросы