Nginx 缓存反向代理与 URL 重写

Nginx 缓存反向代理与 URL 重写

我正在从具有慢速旋转磁盘的后端存储服务器提供大型静态文件。此服务器隐藏在快速 nginx 反向代理后面,并在 SSD 上具有本地缓存​​。它运行良好且速度很快。

现在我想更改存储后端,结果我无法在后端维护存储文件的相同位置。它们将不得不从子目录而不是服务器的根目录提供服务。我如何修改 nginx 反向代理配置,以便它将所有非缓存请求代理到后端的子目录,并且客户端不知道发生了任何变化?

我无法在存储服务器上执行任何操作来维护旧的 URL 方案,因此我必须在前端执行此操作。不应在任何地方传递 301/302 标头。

所以目前我有:

我想要实现的目标:

我尝试了几十种配置,但都没有成功。当我尝试这种配置时,它不是默默地从不同的 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;
    }

答案1

以下有效:

server {
listen 80;
listen      [::]:80;

server_name  blablabla.com;
proxy_cache one;

listen 443 ssl http2;
listen [::]:443 ssl http2;

ssl_certificate ....;
ssl_certificate_key ....;

location / {
   proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie;

   proxy_pass https://f002.backblazeb2.com/file/some-directory/;##$request_uri appended automatically

   [...]
}

答案2

以下应该有效:

location / {
    proxy_pass http://f002.backblazeb2.com/test$request_uri;
    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;
}

相关内容