解决宝塔面板 Nginx + PHP7.1 上传文件 404错误

前几天把网站迁移了一下,WEB 环境也从 lnmp 的一键脚本换成了宝塔面板。

今天突然发现无法上传大文件。

具体表现为:

  1. 小于 500KB 的文件可以上传
  2. 长时间的等待,最后返回 404 错误。

排查过程

首先想到的是 PHP 的配置问题。然后就进宝塔后台看了一眼 PHP 的相关设置,如下图。

解决宝塔面板 Nginx + PHP7.1 上传文件 404错误

PHP 的配置看起来很正常,并没有什么问题。

然后又想到了是不是 Nginx 的配置有问题?然后又看了 Nginx 的配置文件。如下:

user  www www;
worker_processes auto;
error_log  /www/wwwlogs/nginx_error.log  crit;
pid        /www/server/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;

events
    {
        use epoll;
        worker_connections 51200;
        multi_accept on;
    }

http
    {
        include       mime.types;
		#include luawaf.conf;

		include proxy.conf;

        default_type  application/octet-stream;

        server_names_hash_bucket_size 512;
        client_header_buffer_size 32k;
        large_client_header_buffers 4 32k;
        client_max_body_size 50m;

        sendfile   on;
        tcp_nopush on;

        keepalive_timeout 60;

        tcp_nodelay on;

        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
        fastcgi_buffer_size 64k;
        fastcgi_buffers 4 64k;
        fastcgi_busy_buffers_size 128k;
        fastcgi_temp_file_write_size 256k;
		fastcgi_intercept_errors on;

        gzip on;
        gzip_min_length  1k;
        gzip_buffers     4 16k;
        gzip_http_version 1.1;
        gzip_comp_level 2;
        gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml;
        gzip_vary on;
        gzip_proxied   expired no-cache no-store private auth;
        gzip_disable   "MSIE [1-6]\.";

        limit_conn_zone $binary_remote_addr zone=perip:10m;
		limit_conn_zone $server_name zone=perserver:10m;

        server_tokens off;
        access_log off;

server
    {
        listen 888;
        server_name www.bt.cn;
        index index.html index.htm index.php;
        root  /www/server/phpmyadmin;

        #error_page   404   /404.html;
        include enable-php.conf;

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        location ~ /\.
        {
            deny all;
        }

        access_log  /www/wwwlogs/access.log;
    }
include /www/server/panel/vhost/nginx/*.conf;
}

这里似乎也没什么异常?

这就比较难受了。

然后又去看了一眼 Nginx 的错误日志,也并没有发现不对的地方。唯一一处异常是:

[error] 16567#0: *366561 upstream prematurely closed connection while reading response header from upstream, client: 0.0.0.0, server: xxx.xxx.xxx, request: "POST /wp-admin/media-new.php HTTP/2.0", upstream: "fastcgi://unix:/tmp/php-cgi-71.sock:", host: "demo.nicetheme.xyz", referrer: "https://xxx.xxx/wp-admin/media-new.php"

找不出问题,场面一下子就变得紧张了起来。

万般无奈之下,Google 了一下相关关键词。有用的结果并没有。

唯一一个状况和我一样的,说是需要在 Nginx 的配置文件里边引入 proxy.conf 。但是我本身就是引入的啊!!!

何解?

解决

在 Google 上虽然没有找到解决办法,但是给到了一些提示。于是我看了下 proxy.conf 这个文件,发现这行配置:

client_body_buffer_size 512k;

试着把它修改为:

client_body_buffer_size 50m;

然后重启了 Nginx。

然后、然后就可以了?

我是谁?我在哪?我在做什么?

分享