Nginxをキャッシングプロキシとして使用する場合、2つのアップストリームサーバーが404を返さない限り、常に最初のサーバーを試行し、その場合にのみ2番目のアップストリームを試行するように構成する方法はありますか?
アップストリーム構成ブロックのbackup
オプションを知っていますが、最初のサーバーが使用できない場合にのみそのサーバーを試行します。最初のサーバーが利用可能かどうかについて話しているのですが、その特定の要求されたファイルだけが404を返します。
タイムアウトが必要な理由や50X応答を有効なものと言う理由はわかりませんが、本当に404が必要な場合は、Nginxのドキュメントで次のように説明されています。
http://nginx.org/en/docs/http/ngx_http_upstream_module.html#server
max_fails = number
fail_timeoutパラメーターで設定された期間にサーバーとの通信に失敗した回数を設定し、fail_timeoutパラメーターで設定された期間サーバーが使用できないと見なします。デフォルトでは、失敗した試行の数は1に設定されています。ゼロの値は、試行のアカウンティングを無効にします。
これがキッカーです:
失敗した試行と見なされるものは、proxy_next_upstream、fastcgi_next_upstream、uwsgi_next_upstream、scgi_next_upstream、およびmemcached_next_upstreamディレクティブによって定義されます。
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_next_upstream
構文:proxy_next_upstreamエラー|タイムアウト| invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 |オフ...;
http_404サーバーがコード404で応答を返しました。
同様の投稿に対するこの回答は、構成のベースを形成する可能性があります。
はい、アップストリームグループ内の1台のサーバーのweight
を増やし、proxy_next_upstream
で遊んで、スイッチオーバーが発生したくないコードを含めたり除外したりできます。このように、より大きな重みを持つサーバーがほとんどの要求を処理します(多数派/少数派は重みの量に依存しますが、一部の要求はとにかく2番目の要求によって処理されます)。
それでも、backup
を使用するのが適切です。常にすべてのデータを含むサーバーを使用しない理由は想像できません。