Nginx

帶有 URL 重寫的 Nginx 記憶體反向代理

  • November 10, 2019

我正在從具有慢速旋轉磁碟的後端儲存伺服器提供大型靜態文件。該伺服器隱藏在 SSD 上具有本地記憶體的快速 nginx 反向代理後面。它工作得很好而且很快。

現在我想更改儲存後端,因此我無法在後端維護儲存文件的相同位置。而不是伺服器的根目錄,它們必須從子目錄中提供服務。如何修改 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;
   }

以下工作:

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

  [...]
}

以下應該有效:

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;
}

引用自:https://serverfault.com/questions/938485