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