結論から言うと。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も完璧ではないことがわかる。