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

Nginx автоматически удаляет кеш, который будет действовать дольше?

Я установил обратный прокси-сервер Nginx, обслуживающий файлы mp4, размещенные на другом сервере. Теперь все работает нормально, кроме кеша. Хотя у меня есть proxy_cache_valid установлен на 1 день (proxy_cache_valid any 1d), кеш всегда будет автоматически удален через короткий промежуток времени (я думаю, 5-10 минут). Мои размеры файлов варьируются от 200 до 1500 МБ (в среднем 700 МБ).

Я не мог понять, что не так с конфигурациями. Все может помочь.

Вот конфигурации:

worker_processes  auto;

worker_rlimit_nofile 100000;

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


http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    tcp_nopush     on;
    tcp_nodelay on;

    keepalive_timeout  10;
    keepalive_requests 1024;
    client_body_timeout 12;
    client_header_timeout 12;
    send_timeout 10;

    proxy_cache_path /tmp/mycache keys_zone=mycache:10m use_temp_path=off;
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    server {
        listen       80;
        server_name  localhost;

    access_log off;

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    open_file_cache max=10000 inactive=30s;
    open_file_cache_valid    60s;
    open_file_cache_min_uses 5;
    open_file_cache_errors   on;

    client_body_buffer_size 16K;
    client_header_buffer_size 1k;
    client_max_body_size 8m;
    large_client_header_buffers 2 1k;

        location / {
        proxy_cache mycache;
        proxy_max_temp_file_size 1924m;
        slice              100m;
        proxy_cache_key    $host$uri$slice_range;
        proxy_set_header   Range $slice_range;
        proxy_http_version 1.1;
        proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie; 
        proxy_cache_valid  any 1d;
        limit_conn addr 5;
        proxy_pass   http://domain2.com/;
        secure_link $arg_md5,$arg_expires;
        secure_link_md5 "secret$secure_link_expires$uri";

        if ($secure_link = "") { return 403; }
                if ($secure_link = "0") { return 410; }
        }

    }

}

Вашу проблему можно решить, изменив proxy_cache_path настройка в вашей конфигурации Nginx. Здесь вы определяете свое хранилище для хранения объектов кеша. Eсть неактивно = время вариант исправит это:

Кэшированные данные, к которым не осуществляется доступ в течение времени, указанного параметром inactive, удаляются из кеша независимо от их актуальности. По умолчанию неактивно установлено на 10 минут.

В вашем примере я бы увеличил минимальное время до 2 дней:

proxy_cache_path /tmp/mycache keys_zone=mycache:10m use_temp_path=off inactive=2d;