2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Cloudflare + Docker + LaravelでHTTP/3が原因でモバイルだけ通信エラーになった話

2
Last updated at Posted at 2026-03-15

Cloudflare + Docker + LaravelでHTTP/3が原因でモバイルだけ通信エラーになった話

はじめに

バイク中古・新車一括検索プラットフォーム「MotoHub」に、写真を送るだけでAIが車種を判定する機能を実装しました。

機能自体は完成したのに、WiFiでは動くのにモバイル回線(5G)だと即座に通信エラーになるという謎の現象が発生しました。

原因は HTTP/3(QUIC) でした。同じ症状で詰まっている方の参考になれば。


症状

  • WiFi環境 → 正常に動作、バイク車種を判定できる
  • モバイル回線(5G/4G)→ 即座に「通信エラーが発生しました」
  • エラーはすぐに出る(タイムアウトではない)
  • Laravelのログには何も残らない
  • Nginxのアクセスログにもリクエストが届いていない

「サーバーは動いているのに、リクエストがサーバーに届いていない」という不思議な状態でした。


構成

iPhoneモバイル回線
    ↓
Cloudflare(CDN / セキュリティ)
    ↓
さくらVPS
    ↓
Docker
    ├── Nginx(webコンテナ)
    └── PHP-FPM(appコンテナ / Laravel)

調査の流れ

① Laravelのログを確認 → 何もない

docker compose exec app tail -f storage/logs/laravel.log

モバイルでリクエストを送っても、ログに何も出ない。サーバーに届いていない。

② Nginxのアクセスログを確認 → 何もない

docker compose exec web tail -f /var/log/nginx/access.log

同様に何も出ない。Nginxにも届いていない。

③ ローカルから直接叩く → 200 OK

curl -I http://localhost
# HTTP/1.1 200 OK ← 正常

VPS自体は正常に動いている。

④ Cloudflareのアクセスログを確認 → 犯人発見

Cloudflare → Security → Analytics でログを確認すると…
スクリーンショット (127).png

Method: POST
Scheme: HTTP/3
Host: motohub.jp
Path: /bikes/identify
ASN: 138384 - Rakuten Mobile Network

HTTP/3(QUIC) でリクエストが来ていました。


原因

モバイル回線(特に楽天モバイル・au等)はHTTP/3を優先的に使います。

HTTP/3はUDPベースのQUICプロトコルを使用しており、TCPベースのHTTP/1.1やHTTP/2とは根本的に異なります。

NginxはデフォルトでHTTP/3に対応していないため、CloudflareからのHTTP/3リクエストがVPSのNginxに届かず、Cloudflareが502を返していました。
スクリーンショット (127).png


解決策

CloudflareでHTTP/3をオフにする。

Cloudflare → Speed → Settings → Protocol Optimization タブ

スクリーンショット (125).png
HTTP/3をオフにすると、モバイル回線もHTTP/2にフォールバックされます。

これだけで解決しました。


なぜWiFiでは動いていたのか

WiFi環境(自宅・オフィス等)はHTTP/2を使うことが多く、HTTP/3を優先しないルーターが多いためです。

モバイル回線は最新プロトコルの普及が早く、5G端末はHTTP/3を積極的に使います。そのため「WiFiは動く、モバイルは動かない」という症状になっていました。


根本的な解決策(NginxでHTTP/3対応)

今回はCloudflareの設定変更で対処しましたが、本来はNginxをHTTP/3対応させるのが正攻法です。

ただしNginxのHTTP/3対応はまだ実験的(nginx 1.25以降)で、Docker環境での設定が複雑なため、個人開発では「CloudflareでHTTP/3をオフ」の方が現実的です。


まとめ

確認したこと 結果
Laravelログ 何も出ない
Nginxアクセスログ 何も出ない
curl で直接叩く 200 OK
Cloudflareのログ HTTP/3でリクエストが来ていた

WiFiは動くのにモバイルだけ動かない場合、HTTP/3を疑ってみてください。

特にCloudflare + Nginx(HTTP/3未対応)の構成では同じ症状が出やすいです。


前回の記事:GPT-4o vs Claude Sonnet vs Gemini、バイク画像認識で比較してみた

次回:個人開発のMotoHubにGSC分析→SEO改善を実施した話

🏍 MotoHub: https://motohub.jp
X: https://x.com/motohub_jp
GitHub: https://github.com/ausssxi/MotoHub

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?