停止 NGINX 本地缓存目录

停止 NGINX 本地缓存目录

因此,我目前面临的问题是,当发出 HTTP 请求时,系统上的 NGINX 会不断在内存中缓存大量视频文件。这导致 NGINX 使用 20GB 以上的内存,而我不得不运行sync; echo 1 > /proc/sys/vm/drop_caches (清除页面缓存)频繁地停止不断的交换。我在下面提供了相关的配置。

nginx.conf

location /protected/ {
    internal;
    alias /usr/share/nginx/html/videos/;
}

脚本.php

function Download(){
    global $path, $fname;
    $file = "$path/$fname";
    header("Content-Type: video/mp4");
    header("Content-Length: " . filesize($file)); 
    header('Content-Disposition: attachment; filename="'.$fname.'"');
    header("X-Accel-Redirect: /protected/$fname");
    exit;
}

我在 nginx.conf 中尝试过:

sendfile off;
if_modified_since off;
expires off;
etag off;
proxy_no_cache 1;
proxy_cache_bypass 1;
open_file_cache off;

附言:我正在使用 pcstat 和 fincore 计算这些文件的内存使用情况,这些 MP4 文件在被用户观看时被 100% 缓存,每个文件的大小均为 5GB+。

答案1

可以通过设置禁用 nginx 提供的文件的操作系统缓存directio <size><size>是文件大小的阈值,大于该阈值的文件将直接使用 DMA 复制,并且不会缓存文件。

相关内容