Назад | Перейти на главную страницу

Файл не может быть полностью загружен через PHP с моего nginx

У меня есть файл на моем крошечном сервере (BeagleBoneBlack), который я хочу загрузить на другую машину. Поэтому я пытаюсь сделать это через PHP с моего nginx-web-сервера. Размер файла составляет около 1,2 ГБ, а загрузка всегда останавливается на уровне около 410 МБ.

Поскольку оба компьютера находятся за одним переключателем, проблем с подключением я бы не увидел. Кроме того, я могу исключить возможность проблем с программным обеспечением, потому что я тестировал его с другим программным обеспечением 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;

Отправляет ли код PHP содержимое файла (в отличие от перенаправления на фактический файл, который nginx будет обслуживать напрямую)? Кажется, это так, поскольку вы испытываете высокие нагрузки во время загрузки, что указывает на то, что ваш сервер может выполнять тяжелую работу, а не просто передавать данные.

В этом случае вы можете выйти за пределы ограничений выполнения PHP, установленных через:

Не забудьте также проверить журнал ошибок PHP и журнал nginx, чтобы узнать, что еще может происходить. Вы можете увеличить уровень отчетности PHP, установив Отчет об ошибках директива php.ini для E_ALL и убедившись, что журнал ошибок файл установлен.

Также помните, что обслуживание файлов через nginx всегда будет более эффективным, чем отправка байтов через PHP. Особенно, если вы работаете на небольшом / ограниченном оборудовании.