无法通过 PHP 从我的 nginx 完全下载文件

无法通过 PHP 从我的 nginx 完全下载文件

我的小型服务器 (BeagleBoneBlack) 上有一个文件,我想将其下载到另一台机器上。因此,我尝试通过 nginx-web-server 上的 PHP 执行此操作。文件大小约为 1.2 GB,下载总是在 410MB 左右停止。

由于两台计算机都位于同一个交换机后面,因此我不会看到连接问题。此外,我可以排除软件问题的可能性,因为我用不同的 PHP 软件测试过,但出现了相同的问题。通过 SCP 下载没有问题。

在通过 PHP 下载过程中,我看到/proc/loadavg类似的值

3.15 1.17 0.46 1/95 1163
3.15 1.17 0.46 1/95 1164
3.14 1.20 0.48 1/95 1165
3.14 1.20 0.48 1/95 1166
3.21 1.25 0.50 1/95 1167
3.21 1.25 0.50 1/95 1168
3.21 1.25 0.50 1/95 1169
3.44 1.43 0.57 1/95 1172
3.42 1.52 0.61 2/95 1175
3.42 1.52 0.61 1/95 1178

并假设负载相当高。因此我怀疑 nginx-config 并不适合它所运行的小型服务器。我的nginx.conf配置如下:

user www-data;
worker_processes 1;
#worker_processes 4;
pid /var/run/nginx.pid;
events {
        worker_connections 768;
        # multi_accept on;
}
http {
        ##
        # Basic Settings
        ##
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        # server_tokens off;
        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;
        include /etc/nginx/mime.types;
        default_type application/octet-stream;
        ##
        # Logging Settings
        ##
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;
        ##
        # Gzip Settings
        ##
        gzip on;
        gzip_disable "msie6";
        # gzip_vary on;
        # gzip_proxied any;
        # gzip_comp_level 6;
        # gzip_buffers 16 8k;
        # gzip_http_version 1.1;
        # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

        ##
        # nginx-naxsi config
        ##
        # Uncomment it if you installed nginx-naxsi
        ##
        #include /etc/nginx/naxsi_core.rules;
        ##
        # nginx-passenger config
        ##
        # Uncomment it if you installed nginx-passenger
        ##
        #passenger_root /usr;
        #passenger_ruby /usr/bin/ruby;
        ##
        # Virtual Host Configs
        ##
        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}

有人能告诉我为什么我无法下载文件?分别要改变什么?

更新: 由于我进入*466 writev() "/var/lib/nginx/fastcgi/1/00/0000000001" has written only 1498 of 8184 while reading upstream, client:了 nginx 错误日志,因此我也粘贴了以下配置设置fastcgi_params

fastcgi_param   QUERY_STRING            $query_string;
fastcgi_param   REQUEST_METHOD          $request_method;
fastcgi_param   CONTENT_TYPE            $content_type;
fastcgi_param   CONTENT_LENGTH          $content_length;
fastcgi_param   SCRIPT_FILENAME         $request_filename;
fastcgi_param   SCRIPT_NAME             $fastcgi_script_name;
fastcgi_param   REQUEST_URI             $request_uri;
fastcgi_param   DOCUMENT_URI            $document_uri;
fastcgi_param   DOCUMENT_ROOT           $document_root;
fastcgi_param   SERVER_PROTOCOL         $server_protocol;
fastcgi_param   GATEWAY_INTERFACE       CGI/1.1;
fastcgi_param   SERVER_SOFTWARE         nginx/$nginx_version;
fastcgi_param   REMOTE_ADDR             $remote_addr;
fastcgi_param   REMOTE_PORT             $remote_port;
fastcgi_param   SERVER_ADDR             $server_addr;
fastcgi_param   SERVER_PORT             $server_port;
fastcgi_param   SERVER_NAME             $server_name;
fastcgi_param   HTTPS                   $https;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param   REDIRECT_STATUS         200;

答案1

PHP 代码是否发送文件内容(而不是重定向到 nginx 直接提供的实际文件)?似乎是这样,因为您在下载过程中遇到了高负载,这表明您的服务器可能正在执行一些繁重的工作,而不仅仅是传递数据。

在这种情况下,您可能会达到通过以下方式设置的 PHP 执行限制:

请务必检查 PHP 错误日志和 nginx 日志,以查找可能发生的其他情况的线索。您可能需要增加 PHP 报告级别,设置错误报告php.ini 指令全部 并确保错误日志文件已设置。

还要记住,通过 nginx 提供文件服务总是比通过 PHP 发送字节更有效率。特别是当您在小型/受限的硬件上运行时。

相关内容