具有回退功能的 nginx 反向代理

具有回退功能的 nginx 反向代理

是否可以设置 nginx 来反向代理到服务器,但是如果文件在服务器 A 上不存在,那么就回退到服务器 B,而文件肯定会在服务器 B 上。

我需要进行 2TB S3 迁移,如果可以以这种方式设置 nginx,则可以简化该过程。

以下是我当前使用的反向代理配置:

http {
    proxy_cache_path  /data/nginx/cache  levels=1:2    keys_zone=STATIC:100m
    inactive=30d  max_size=10g;
    server {
        location /image/ {
            proxy_pass             https://origin.example.com/;
            proxy_set_header    Host    origin.example.com;
            proxy_http_version 1.1;
            proxy_set_header Connection "";
            proxy_cache            STATIC;
            proxy_cache_valid      200  30d;
            proxy_cache_use_stale  error timeout invalid_header updating
            http_500 http_502 http_503 http_504;
        }

答案1

Nginx Plus 具有主动健康检查功能。您可以将 2 台服务器添加到上游组,对文件的 URI 应用主动健康检查,如果返回 404 错误,Nginx 会将该服务器标记为不健康,并且所有请求将流向组中的另一台服务器。

https://docs.nginx.com/nginx/admin-guide/load-balancer/http-health-check/#hc_active

但是,这会将您的所有流量反弹至另一台服务器。

如果您可以控制上游,您还可以使用X-Accel

https://www.nginx.com/resources/wiki/start/topics/examples/x-accel/

如果上游不存在该文件,则上游将返回标X-Accel-Redirect头,反向代理将读取该标头,并从另一台服务器请求该文件。

相关内容