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

Не удалось скачать файл. Ошибка чтения / пути / к / файлу Nginx aio (22: недопустимый аргумент)

На нашем сайте мы добавили возможность скачивать наши видео файлы. Мы используем nginx на наших серверах. Странная проблема в том, что иногда файлы можно загрузить, а иногда нет.

Ошибка, которую мы получаем в журнале ошибок nginx.

[crit] 62196#62196: *15951408 aio read "/path/to/storage/files/[unique_filecode].mp4" failed (22: Invalid argument) while sending response to client, client: [client ip], server: storage.example.com, request: "GET /api/download/files/filename.mp4 HTTP/1.0", upstream: "fastcgi://unix:/var/run/php-fpm/php7.3-fpm.sock", host: "storage.example.com", referrer: "https://example.com/download?file_id=FILE_ID" 
[error] 62197#62197: *15951406 upstream prematurely closed connection while reading response header from upstream, client: [SERVER_IP], server: storage.example.com, request: "GET /api/download/files/filename.mp4 HTTP/1.1", upstream:

Чтобы начать загрузку, мы используем php и выводим заголовки

$path = /download/files/[unique_filecode].mp4?file_id=[file_id]&ip=[CLIENT IP]&speed=0&mode=1&timestamp=[unix timestamp];

// Speed: Limit the download speed depending on the user type

return response('', 200)->withHeaders([
            'Content-type' => 'video/mp4',
            'X-Accel-Redirect' => $path,
            'Content-disposition' => '"attachment";'
        ]);

Наша конфигурация nginx

user www-data www-data;
worker_processes  auto;
worker_rlimit_nofile 10240;
error_log  /var/log/nginx/error.log  info;

events {
    worker_connections  10240;
    multi_accept on;
}

http {
    include       mime.types;
    default_type  video/mp4;
    server_tokens off;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    # file handle caching / aio
    open_file_cache          max=200000 inactive=3m;
    open_file_cache_valid    2m;
    open_file_cache_min_uses 2;
    open_file_cache_errors   on;
    aio on;
    directio 8m;
    directio_alignment 4096;

    access_log off;
    sendfile    on;
    tcp_nopush  on;
    tcp_nodelay on;

    limit_conn_zone $binary_remote_addr zone=addr:20m;
    include conf.d/*.conf;
}
server {

        listen      80;
        server_name storage.example.com;

        set $storagePath "/path/to/storage";

        location /download/ {
            internal;
            alias $storagePath/;
            limit_conn addr 2;
            set $limit_rate $arg_speed;
        }
}

Почему aio бросает Invalid argument ошибка? Я проверил путь, и он правильный.

В настоящее время мы используем CentOS 7 на нашем сервере хранения.

РЕДАКТИРОВАТЬ:

Диски хранения отформатированы с помощью ext4

/dev/sdd1                           ext4      2.7T  2.2T  414G  85% /disk4
/dev/mapper/centos_hosted--by-disk1 ext4      2.5T  2.1T  228G  91% /disk1

РЕДАКТИРОВАТЬ 2:
Nginx версии 1.15.11
Nginx скомпилирован с помощью:
Модули загрузки и vod Nginx - это последние доступные версии.

./configure 
--error-log-path=/var/log/nginx/error.log 
--access-log-path=/var/log/nginx/access.log 
--with-debug 
--with-http_auth_request_module 
--with-http_stub_status_module 
--with-http_mp4_module 
--add-module=../nginx-upload-module 
--add-module=../nginx-vod-module 
--with-file-aio 
--with-threads 
--with-http_ssl_module 
--with-http_v2_module
--with-http_realip_module

РЕДАКТИРОВАТЬ 3:

 vod_open_file_thread_pool;
    vod_path_response_prefix '';
    vod_path_response_postfix '';
    vod_segment_duration 20000;
    vod_align_segments_to_key_frames on;
    vod_expires 6h;

    vod_mapping_cache mapping_cache 8m; 
    vod_response_cache response_cache 128m;    
    vod_metadata_cache metadata_cache 4000m;