$cd ../troubleshooting/
Low🔗 Connectivity#WebSocket
ゲートウェイWebSocketが切断と再接続を繰り返す
// ブラウザのコントロールUIが'接続中...'スピナーを無限に表示するか、ゲートウェイがWebSocketアップグレードの失敗を繰り返し表示します。通常、古い認証トークンまたはCORSオリジンヘッダーの欠如が原因。
rotate_token.sh
✅ 修正1 — 認証トークンをクリアして再ログイン
古いトークンがWebSocket 401 → 高速再接続ループを引き起こす
# ブラウザから古い認証トークンをクリア
localStorage.removeItem('openclaw_token')
# またはCLIでトークンを再生成
openclaw auth rotate
# その後コントロールUIをリロードcors.yaml
✅ 修正2 — CORSホワイトリストにオリジンを追加
実際のオリジンを追加 — ワイルドカード'*'はデフォルトで無効
# openclaw.yamlで
gateway:
cors:
origins:
- http://localhost:3000
- https://your-custom-domain.com
- http://192.168.1.100:3000 # LANからアクセスする場合のローカルIPnginx.conf
✅ 修正3 — ゲートウェイポートとリバースプロキシヘッダーを確認
nginx WebSocketプロキシ設定
# nginxの例 — locationブロックに追加
location /ws {
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_read_timeout 86400; # タイムアウト切断防止のため24時間
}ℹ リバースプロキシの後ではよく発生
OpenClawがnginx/Caddy/Traefikの後ろにある場合、WebSocketアップグレードヘッダー(Upgrade、Connection、Sec-WebSocket-*)が正しく転送されているか確認してください。
← ハートビートの漏洩← すべての問題
❓ FAQ
Q1. 認証トークンが古いかどうかの確認方法は?
ゲートウェイログで'401 Unauthorized'か'token expired'を確認。ブラウザのDevTools → NetworkタブでWS接続をフィルタし、401で高速にループしているか確認するとより明確です。サーバー側で'openclaw gateway auth-token --show'でトークンを再生成し、ブラウザで'localStorage.clear()'を実行して再ログインを強制します。
Q2. リバースプロキシの背後で発生しますか?
はい、実際これが最も一般的な原因です。WebSocketアップグレードヘッダーを転送しないリバースプロキシ(nginx、Caddy、Traefik、HAProxy)はハンドシェイクを失敗させ、ブラウザが即座にリトライしてループを作ります。修正方法はプロキシ設定にWebSocketヘッダーを追加することです:Upgrade、Connection、Host、そして長いproxy_read_timeout(24時間は86400)。タイムアウト延長がないと60-90秒後に接続が切れます。
Q3. Control UIを完全に無効にできますか?
はい。config.yamlで'gateway: ui: false'を設定してゲートウェイを再起動します。エージェントはCLIとメッセージチャネル(Telegram、WhatsApp、Discord)で引き続き完全に動作します。HTTPSなしの公開サーバーでOpenClawを実行している場合、UIを無効にすることで攻撃面も減らせます。
Q4. WebSocketが短時間接続した後、60-90秒ごとに切断されます。何が問題ですか?
これはほぼ常にリバースプロキシのタイムアウトです。プロキシがデフォルトの読み取りタイムアウト後(nginxは通常60秒)にアイドルのWebSocket接続を閉じています。nginxのlocationブロックに'proxy_read_timeout 86400;'を追加して24時間に延長してください。Caddyには'@websocket'マッチャーを使用。TraefikのWebSocketタイムアウトはルーター設定の'readTimeout'で制御されます。
Q5. ブラウザコンソールにCORSエラーが表示されます。修正方法は?
ブラウザリクエストのOriginヘッダーがopenclaw.yamlの許可オリジンと一致しない場合にCORSエラーが発生します。cors.originsリストに正確なオリジン(スキーム+ドメイン+ポート)を追加してください。よくある間違い:ポート番号を忘れる('http://localhost'対'http://localhost:3000')、httpとhttpsの混在、ワイルドカード('*')の使用(OpenClawはセキュリティのためデフォルトで無効)。DevTools → Network → リクエストヘッダーで正確なOrigin値を確認してください。
Q6. 再接続ループが一部のユーザーにしか発生しません。なぜですか?
サーバー側の設定問題ではなく、特定のブラウザ、ネットワーク条件、またはセッションに固有の問題を示しています。一般的な原因:(1)一部のユーザーが古いキャッシュ認証トークンを持っている;(2)そのユーザーのネットワークの企業VPNやファイアウォールがWebSocket接続を切断している;(3)ユーザーがCORS許可リストにないサブネットにいる。別のブラウザやネットワークから試してもらって原因を絞り込んでください。