У меня есть файл на моем крошечном сервере (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. Особенно, если вы работаете на небольшом / ограниченном оборудовании.