web-dev-qa-db-ja.com

Sinatra / Nginx / ELBv2APIはChrome 58以降のみ)でERR_SPDY_PROTOCOL_ERRORを生成しています

次のスタックを持つAPIがあります。

Sinatra <=HTTPS/TLS=> Nginx <=HTTPS/TLS=> ALB(ELBv2)

これは基本的なURL短縮サービスであり、301リダイレクトをブラウザに送信して長いURLに移動します。これは1、2年は問題なく機能していましたが、Chrome 58なので、ChromeのAPIからのリダイレクトでERR_SPDY_PROTOCOL_ERRORが発生します。通常のページは正常に返され、他のブラウザは正常に動作します。返信トラフィックフローを確認すると、間違いなくALBによって送信され、CloudWatchまたはNginxまたはSinatraのログにエラーは報告されていません。

AWSサポートでチケットを開きましたが、あまり役に立ちませんでした。他の誰かが似たようなものを見たことがありますか?私のnginxはSPDYまたはHTTP2を使用するように構成されていないため、これを修正する方法がわかりません。

編集:これは、失敗した試行と動作(curl経由)のALBサンプルアクセスログです:

h2 2017-06-21T15:30:01.438546Z app/aws-example-net/019315b3036f76ac 184.75.37.61:59367 10.252.14.202:443 0.000 0.004 0.000 301 301 30 1170 "GET https://aws.example.net:443/short/-OpLPG8h HTTP/2.0" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.104 Safari/537.36" ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 arn:aws:elasticloadbalancing:us-east-1:XXXXXXXXXXXX:targetgroup/ecs-prod-e-urlshortener/7c6cddcc83c91aeb "Root=1-594a90f9-41b321bf039f142a083cb587"
h2 2017-06-21T15:30:06.928711Z app/aws-example-net/019315b3036f76ac 184.75.37.61:19376 10.252.14.202:443 0.000 0.004 0.000 301 301 46 1170 "GET https://aws.example.net:443/short/-OpLPG8h HTTP/2.0" "curl/7.50.1" ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 arn:aws:elasticloadbalancing:us-east-1:XXXXXXXXXXXX:targetgroup/ecs-prod-e-urlshortener/7c6cddcc83c91aeb "Root=1-594a90fe-2f1b92043fe3030461e84219"

編集2:

Curl -vvvからのサニタイズされた出力例:

https://Pastebin.com/Ws553Mxj

1
Dan R

私たちはちょうど今この問題に遭遇しました。私たちのアプリは「Content-Length」ヘッダーを設定し、gzipを使用していました。どうやらhttp/2はそのコンボが好きではありません!

「Content-Length」を削除して機能します。

1
Sean256