我在 nginx 下的 php 中运行一个 bookstack 实例。
不幸的是我无法上传任何大于 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 错误,因此我们将其排除在范围之外)。无需在 bookstack 后端进行任何调整。
php配置(并且只安装了一个版本):
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
:
上传最大文件大小 28M
...但只持续几秒钟。一两秒后,它会重置为2M
。文件上传实际上在这几秒钟内有效(但需要很大的灵活性......)。
根据service php7.0-fpm status
输出,主服务进程在此期间内不会重新启动,并且工作进程 PID 保持不变。
此外,启用catch_workers_output = yes
它www.conf
不会向 fpm 日志添加任何有用的内容。
我如何才能将文件上传限制延长到两秒以上?
我想我可以每两秒重启一次 php-fpm,但实际上这并不好笑。
有没有更可靠的方法来解决这个问题?
答案1
在 /etc/nginx/nginx.conf 中更改/添加 http 块
client_max_body_size 28m;
您还需要更改您的 pho.ini 文件。
答案2
我正在运行 2 个 bookstack 实例,一个在 apache 上,一个在 nginx 上,两者都在 php 7.2 上。奇怪的是,我的 nginx 实例没问题,但今天我发现我的 apache 实例也有这个错误。
post_max_size
我设法通过将我的设置(和upload_max_filesize
,两者均为 200M)从复制到/etc/php/7.2/fpm/php.ini
来修复错误/etc/php/7.2/apache2/php.ini
。由于您正在使用 nginx,我不确定这是否会对您有所帮助,但至少可以尝试一下。