nginx缓存过早清空

时间:2019-04-18 10:54:17

标签: nginx

我们有一个非常不稳定的旧应用程序,直到负责人员可以使它表现得更好之前,我试图通过在其前面放置一个nginx缓存来提高其可靠性。不幸的是,该应用程序还基于useragent对下载进行了一些重定向,这使缓存变得很麻烦。

所以这两个目标是:

  1. 提供过时的静态内容并在后台进行更新以使其更快。而且如果事件的起因下降,则会提供静态内容。
  2. 如果原点断开,请执行一般重定向到Windows下载页面。用户应该可以从那里导航到缓存中的其他OS页面。

尽管缓存大小为10gb,磁盘容量为30Gb,但似乎并没有建立超过20-30mb的缓存。 nginx plus cache zones

nginx dashboard

我可以点击页面,并且将返回X-Cached MISS,再次点击它会得到X-Cached HIT,然后随机返回到X-Cached MISS,而不是STALE或正如我所期望的UPDATING

权限似乎正确。我什至尝试删除目录以允许Nginx重新创建它。

drwx------  18 nginx root  4096 Apr 17 22:10 nginx-cache

磁盘上的文件很小

sudo du -hs nginx-cache/
27M     nginx-cache/

也不缺少空间

df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            818M     0  818M   0% /dev
tmpfs           166M   18M  149M  11% /run
/dev/sda1        30G  3.5G   26G  12% /
tmpfs           828M     0  828M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           828M     0  828M   0% /sys/fs/cgroup
tmpfs           166M     0  166M   0% /run/user/1000

在下面配置。

proxy_cache_path /nginx-cache levels=1:2 keys_zone=STATIC:10m max_size=10g use_temp_path=off;

map $query_string $has_os {
    "~.*os=.*" 1;
}


server {
    listen       80 default_server;
    server_name  localhost;

    location @downloads-redirect {
        add_header X-Nginx-Redirect true;
        rewrite ^.* $1?os=win10x64 redirect;
    }

    location / {
        proxy_cache STATIC;
        proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504 http_404;
        proxy_cache_lock on;
        proxy_ignore_headers Cache-Control Vary Set-Cookie Expires;
        proxy_hide_header Set-Cookie;
        proxy_cache_valid 200 5m;
        proxy_cache_background_update on;
        proxy_buffering on;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        add_header X-Cached $upstream_cache_status;
        proxy_pass http://foo.bar.com;

        location ~* "downloads/[a-z]{4}.html$" {
            proxy_intercept_errors on;
            proxy_cache STATIC;
            proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504 http_404;
            proxy_cache_lock on;
            proxy_ignore_headers Cache-Control Vary Set-Cookie Expires;
            proxy_hide_header Set-Cookie;
            proxy_cache_valid 200 5m;
            proxy_cache_background_update on;
            proxy_buffering on;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $remote_addr;
            add_header X-Cached $upstream_cache_status;

            if ($has_os != 1) {
                add_header X-Redirect-Expected true;

                error_page 404 = @downloads-redirect;
                error_page 500 = @downloads-redirect;
                error_page 502 = @downloads-redirect;
                error_page 503 = @downloads-redirect;
                error_page 504 = @downloads-redirect;
            }

            proxy_pass http://foo.bar.com;
        }
    }

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

任何帮助将不胜感激。这是我第一次配置nginx服务器,所以很有可能我做错了事。

1 个答案:

答案 0 :(得分:0)

经过一番混乱之后,我缺少的关键是inactive=3M;指令上的proxy_cache_path

proxy_cache_path /nginx-cache levels=1:2 keys_zone=STATIC:10m max_size=10g use_temp_path=off inactive=3M;