
フロントエンドとバックエンドに別々のサーバーを持つ API First アプリがあります。
フロントエンドは、静的な Angular サイトを提供する単なる NGINX サーバーです。バックエンドは Play Scala サーバーです。
最近、CORS を使用する必要がないようにするために、次のようなブロックを使用して、送信されたものをすべて/api
転送するようにしました。api.myapp.com
location /api/ {
proxy_pass https://api.myapp.com/;
}
すべて正常に動作しているように見えますが、ときどきフロントエンド サーバーがリクエストの受け渡しを停止し、一部のリクエストは通過するにもかかわらず 502 を返し続けます。
NGINX サーバーを再起動すると、すべて正常になります。
NGINX ログを見ると、/api リクエストに対して 499 エラーが多数発生しています。
[15/Jan/2017:22:31:18 +0000] "GET /api/1/users/tzXWM4hNAHUvT9SfA-pAGA/organizations?v=3 HTTP/1.1" 499 0 "https://app.myapp.com/dashboard" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36" "10.225.158.152"
バックエンドのログを見ると、502 を返すリクエストは実際にはバックエンドに到達していないことがわかります。
NGINX は何らかの方法で一部の URL を制限しているのでしょうか、それとも何らかの理由でバックエンド サーバーがなくなったと考えているのでしょうか?
Apache で同様のことを行うには、ProxyPass ディレクティブに retry=0 を設定する必要があることはわかっています。