我正在从具有慢速旋转磁盘的后端存储服务器提供大型静态文件。该服务器隐藏在 SSD 上具有本地缓存的快速 nginx 反向代理后面。它工作得很好而且很快。
现在我想更改存储后端,因此我无法在后端维护存储文件的相同位置。而不是服务器的根目录,它们必须从子目录中提供服务。如何修改 nginx 反向代理配置,以便将所有非缓存请求代理到后端子目录,并且客户端不知道有任何更改?
我不能在存储服务器上做任何事情来维护旧的 URL 方案,所以我必须在前端做。不应该在任何地方传递 301/302 标头。
所以目前我有:
- 客户端见:https ://frontend.com/file.txt
- Nginx 从以下位置获取非缓存文件: https ://backend.com/file.txt
我想要达到的目标:
- 客户端见:https ://frontend.com/file.txt (客户端没有可观察到的变化)
- Nginx 从以下位置获取非缓存文件:https ://backend.com/directory/file.txt
我已经尝试了几十种配置,但没有运气。当我尝试此配置时 - 它不是从不同的 URL 静默获取数据,而是以通过正则表达式添加测试的无限循环结束。
location / {
rewrite /(.*) /test/$1 break;
proxy_pass http://f002.backblazeb2.com;
proxy_redirect off;
proxy_set_header Host $host;
proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
proxy_cache_revalidate on;
proxy_read_timeout 2;
proxy_connect_timeout 3;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_cache_valid 200 302 60s;
proxy_cache_valid 404 1m;
limit_conn perip 23;
limit_req zone=dynamic burst=60;
expires 24h;
}
以下工作:
以下应该有效: