Php 忽略文件上传限制

Php 忽略文件上传限制

我在 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 = yeswww.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,我不确定这是否会对您有所帮助,但至少可以尝试一下。

相关内容