LinuxクラウドVPS上でゲートウェイの手前にNginxやCaddyを置くと、「curlでは202でも問題ないのに、SaaSのURL検証だけ失敗する」ことがあります。202 Acceptedは成功応答ですが、一部の連携先は200 OKのみを合格扱いにしています。まずcurl -sS -o /dev/null -w "%{http_code}\n" https://example.com/openclaw/webhookで実測し、ベンダー仕様と突き合わせてください。
症状と再現の切り分け
ゲートウェイが非同期キューへ積む設計だと202は自然です。一方、LBのヘルスチェックが/webhookを叩くと、検証失敗ログとプローブ失敗が混線します。ヘルスは軽い200専用パス(例:/healthz)、Webhookは別locationやCaddyのhandleで閉じてください。TLSと403系は OpenClaw × Slack:コールバックURLと403/リプレイの段階的FAQ と併読すると早いです。
意思決定マトリクス:どこで202を潰すか
標準のNginxproxy_passでは、上流の成功系ステータスを別コードへ書き換えられません(error_pageは主にエラー向け)。現実的な選択肢は次表のとおりです。
| アプローチ | 向いているケース | 注意点 |
|---|---|---|
| アプリで200へ | ベンダー検証が厳しい | 非同期意味の説明を残す |
| Caddy handle_response | アプリを触りたくない | 構文・ボディ整合 |
| Lua/sidecar | 細かい条件分岐 | 運用と境界 |
| 連携先の緩和 | 社内受口 | 外部SaaSでは不可が多い |
GET /webhookを200前提で叩くとPodが落ちます。WebhookはPOST専用、プローブはGET /healthzへ。202→200をエッジで足す場合もプローブは別経路にしてください。
Nginx / Caddy:エッジでできることの輪郭
Nginx(OSS)
上流202は透過されます。202→200はngx_http_lua_moduleや極小シムが現実的です。
Caddy
reverse_proxyのhandle_responseで特定ステータスを差し替える構成が取りやすいです。SaaSが本文まで検証するか先に確認してください。
デプロイと検証を同じパイプラインに載せる
リバプロ設定をGit管理し、本番反映をCIから回すと「検証は通ったが本番だけ古いテンプレ」のズレが減ります。GitLabでの比較は GitLab CI/CD自動デプロイ vs 純SSH手更新(意思決定マトリクスとFAQ) を参照。ステータス変更コミットの直後に本番URLへcurlし、SaaSの再テストまで一連で回すと再発検知が早くなります。
FAQ
Q. 202は成功なのに失敗するのはなぜ
A. 検証ロジックが200固定の実装になっているためです。仕様が2xxでもコードが厳格なケースがあります。
Q. CDNを挟むと変わるか
A. 202を自動で200に直す機能は期待せず、CDNレスポンスとオリジン直叩きを比較してください。
クラウド Mac mini なら、Linuxゲートウェイの外側の仕事も速い
Webhookの手前でTLSとパスをいじりつつ、iOSビルドやXcodeでの再現検証まで同じ週に回すチームでは、静音で常時稼働向きのクラウド Mac mini M4を併用すると手戻りが減ります。Apple Siliconのユニファイドメモリはビルドと小規模モデル検証の切り替えで帯域ボトルネックを抑え、待機電力が約4W前後と低いので常時Runnerを置く心理的ハードルも下がります。
macOSはUnix系ツールチェーンとGatekeeper/SIPの両立ができ、長期無人運用でもクラッシュ率が低いのが実務メリットです。同価格帯の汎用PCと比べても、省電力・小筐体・低騒音というトータルコストは積み上がりにくく、CIと手元検証を同じOS上で揃えられる点がチームの手戻りを減らします。
Gatewayの土台はLinuxでも、配信と署名の最後の一哩はMacで揃えたいチームには、VPSSpark のクラウド Mac mini M4 が現実的な次の一手です。プランを今すぐ確認し、Webhookまわりの検証とビルドを同じリズムで回してください。