我们有一个非常不稳定的旧应用程序,直到负责人员可以使它表现得更好之前,我试图通过在其前面放置一个nginx缓存来提高其可靠性。不幸的是,该应用程序还基于useragent对下载进行了一些重定向,这使缓存变得很麻烦。
所以这两个目标是:
尽管缓存大小为10gb,磁盘容量为30Gb,但似乎并没有建立超过20-30mb的缓存。
我可以点击页面,并且将返回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服务器,所以很有可能我做错了事。
答案 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;