8

イメージサーバーのクラスターの前にnginxインスタンスがあります。

  upstream img-farm-1  {
    server 10.0.1.1;
    server 10.0.1.2;
    server 10.0.1.3;
    server 10.0.1.4;
    # etc
  }

  location ~ ^/static: {
    rewrite /static:(.*) /$1 break;
    proxy_pass http://img-farm-1;
    limit_except GET {
        allow all;
    }
  }

このクラスターは、オンラインになっている新しいクラスターに取って代わられています。しばらくの間、古いクラスターからイメージを提供したいのですが、イメージが新しい場合、またはイメージが古いクラスターから移行された場合は、新しいクラスターにフォールバックします。新しい。移行が完了したら、元の設定に戻ることができます。

だから私はできると思った

  upstream img-farm-2  {
    server 10.0.2.1;
    server 10.0.2.2;
    server 10.0.2.3;
    server 10.0.2.4;
    server 10.0.2.5;
    # etc
  }

  location ~ ^/static: {
    access_log /var/log/nginx/static.access.log;
    rewrite    /static:(.*) /$1 break;
    proxy_pass http://img-farm-1;
    error_page 404 = @fallback-2;
  }

  location @fallback-2 {
    access_log /var/log/nginx/static-2.access.log;
    proxy_pass http://img-farm-2;
  }

しかし、これは機能しません。404が表示されていますが、に何も書き込まれていない限りstatic.access.log、ディレクティブは実行されていません。error_page 404static-2.access.log

try_filesローカルファイルがなく、すべてがプロキシされているので、使用できないと確信しています。

誰かが以前にこのようなことをしたことがありますか?私は何が欠けていますか?

4

3 に答える 3

14

愚かな私。必要なのはproxy_intercept_errors on;最初の場所だけ

于 2012-11-14T14:31:30.310 に答える
0

これはうまくいくはずです

upstream img-farm-2  {
    server 10.0.2.1;
    server 10.0.2.2;
    server 10.0.2.3;
    server 10.0.2.4;
    server 10.0.2.5;
    # etc
}

location ~ ^/static: {
    access_log /var/log/nginx/static.access.log;
    rewrite    /static:(.*) /$1 break;
    proxy_pass http://img-farm-1;
    proxy_intercept_errors on;
    error_page 404 = @fallback-2;
}

location @fallback-2 {
    access_log /var/log/nginx/static-2.access.log;
    proxy_pass http://img-farm-2;
}
于 2021-12-09T11:56:36.843 に答える