Nginx
帶有 URL 重寫的 Nginx 記憶體反向代理
我正在從具有慢速旋轉磁碟的後端儲存伺服器提供大型靜態文件。該伺服器隱藏在 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; }
以下工作:
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; }