reverse proxy とは? 前面に立つリクエストルーター
reverse proxy は、1 つ以上のバックエンドサーバーに代わってクライアントのリクエストを受け付け、各リクエストを転送し、バックエンドのレスポンスをあたかもオリジンであるかのように返すサーバーです。
クライアントは、その背後にある実際のサーバーではなく reverse proxy と通信します。この間接化により、TLS 終端、キャッシュ、load balancing、ルーティングを 1 か所で追加できます。パイプラインが Web サービスをデプロイするとき、通常はその前に reverse proxy が立ち、proxy の設定ミスはデプロイ後のエラーの頻繁な原因です。
reverse と forward
forward proxy はインターネットに出ていくクライアントに代わって動作し、reverse proxy はトラフィックを受け取るサーバーに代わって動作します。reverse proxy はバックエンドのトポロジーをクライアントから隠します。
扱うもの
- バックエンドが内部で素の HTTP を話せるようにする TLS 終端。
- host や path によって正しいバックエンドへリクエストをルーティングすること。
- バックエンドの負荷を軽くするためのキャッシュと圧縮。
- インスタンス間の基本的な負荷分散。
TLS 終端
reverse proxy は一般に証明書を保持して HTTPS を復号し、信頼されたネットワーク上のバックエンドへ素の HTTP を渡します。ここで証明書の紐付けを忘れるデプロイは、公開エンドポイントを壊します。
デプロイにおける reverse proxy
Nginx、Envoy、マネージドの ingress controller などのツールは reverse proxy として機能します。新しいバージョンを展開することは、多くの場合、新しいバックエンドへルーティングするよう proxy を更新することを意味し、upstream が準備できていない場合に 502 が現れるのはここです。
502 と 504 が発生する理由
reverse proxy は、バックエンドが無効なレスポンスを返すと 502 を、バックエンドが timeout すると 504 を返します。デプロイ中、これらはしばしば新しいインスタンスがまだ起動中でトラフィックを受け付けていないことを意味します。
一時的な proxy エラー
デプロイ中にバックエンドが入れ替わる間の短い 502 や 504 は、通常は一時的です。Latchkey の runner は、一般的なエンドポイントへの一時的な proxy レスポンスを自動的にリトライするため、デプロイ中の一瞬の upstream 再起動が、それ以外は健全な step を失敗させることはありません。
重要なポイント
- reverse proxy はバックエンドサーバーの前面に立ち、クライアントのリクエストをそれらに転送します。
- TLS 終端、ルーティング、キャッシュ、負荷分散を一元化します。
- デプロイ中、バックエンドがまだ準備できていないとき 502 または 504 を返します。