我们希望设置一个 NGINX 服务器,它将代理收到的所有请求到上游服务器,但当上游服务器发生故障/不可用时,它应该返回到最近收到的文件的本地缓存。设置它的最佳方法是什么?
我认为最好的方法是将 5xx 错误文档设置为类似
error_document 500 502 503 504 =200 /cache/;
location /cache/ {
#Send cached files
}
但我不确定如何有效地*让 NGINX 缓存全部文件,同时仍然代理到上游,然后如何通过位置从缓存中拉回文件。
*不考虑 A) 使用同一缓存文件的多个版本快速填满磁盘,以及 B) 不过度降低请求速度
答案1
如果远程服务器上的文件没有改变,proxy_store
可能对你有用。例如
upstream big {
server serverfault.com:80;
}
root /somewhere;
location / {
try_files $uri @big;
}
location @big {
proxy_pass http://big;
proxy_set_header Host serverfault.com:80;
proxy_store on;
}