Я запускаю экземпляр 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 экземпляра книжных стог, один на 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, я не уверен, что это поможет вам, но, по крайней мере, стоит попробовать.
в /etc/nginx/nginx.conf изменить / добавить в блоке http
client_max_body_size 28m;
Вам также нужно будет изменить свой файл pho.ini.