それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Cloudflareのリクエストがまれに、500エラーになるので調べていた.

結論から言うと。Apacheが、H2をリッスンできなくて詰んでた

Cloudflare の 500 エラーになる。

Cloudflareのリクエストがまれに、500エラーになるので調べていたら

Cloudflare→nginx→ apache とリバプロを構成しているのが原因らしい。 そしてさらにエラーを見ていると http/2 のリクエストが一部エラーになっている。

HTTP/2の捌き方の問題。

cloudflare側がhtttp/2でリクエストを投げてくるのだが、こちらが非対応であればCloudflare側が制御してエラーが出ないようにしてくれる。しかし、Cloudflare側の制御が間に合わなくて500エラーになることが多いようですね。

リクエスト1000件に対して、約10%がエラーになっていました。

CloudflareのCDNのうち、10%に設定ミスがあるようで、HTTP/2をうまく捌いてくれないようでした。

http_upgrade

そこで、リバプロを構成しているnginx をhttp_upgrade を有効にして

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

本体であるApacheに、h2 のプロトコルを捌くよう設定した

<VirtualHost *:443 >
  Protocols http/1.1 h2c h2

これで、cloudflareの500エラーが大幅に減った。

cloudflareの500エラーについてはいろいろと原因が考えられるが、調べているとCloudflareも完璧ではないことがわかる。