CollaboraをNginxの背後に配置してもWebSocketが壊れないようにする方法

Collabora を Nginx の専用の HTTPS ホスト名に配置し、エディタと検出パスを に転送しcoolwsd、ライブソケットルートで WebSocket アップグレードヘッダーを明示的に渡します。単一のホストの場合、Nginx はパブリック TLS を終端し、プライベートインターフェースで Collabora に HTTP を送信できます。Nginx と Collabora が異なるコンテナで実行されている場合は、 の代わりに共有ネットワーク上の Collabora サービス名を使用します127.0.0.1。

ブラウザのHTTPSポート443は、Nginxを経由してCollaboraにプライベートHTTPポート9980経由でルーティングされます。
この例における接続構成は以下のとおりです。ブラウザはポート443でHTTPSを使用し、Nginxはポート9980のプライベートHTTPアップストリームでCollaboraにトラフィックを転送します。

この例では、ユーザーがアクセスを許可しhttps://office.example.com、Nginx が証明書を処理することを前提としています。Collabora のデフォルトのリスニングポートは 9980 です。デプロイメントでアクセス可能なポートを使用してください。 のような URL プレフィックスにはhttps://example.com/collabora/、パスとサービス ルートの設定を調整する必要があるため、このルート ホスト構成はそのままでは適用されません。

1. アップストリームとWebSocket接続マップを定義する

Nginxのコンテキストで、Collaboraのアップストリーム名と、クライアントがWebSocketを要求した場合にのみhttp接続ヘッダーを設定するマップを追加します。このブロックは、他のブロックの外側に配置してください。Nginxが別の方法でCollaboraにアクセスする場合は、アドレスを置き換えてください。upgradeserver

map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

upstream coolwsd {
    server 127.0.0.1:9980;
}

Nginx自体がコンテナである場合、は127.0.0.1Collaboraコンテナではなく、そのNginxコンテナを参照します。共有Dockerネットワークでは、代わりに、そのネットワークで解決されるサービス名を使用して、upstreamを指定できますserver collabora:9980;。

2. HTTPS仮想ホストとCollaboraルートを追加する

のHTTPSserverブロック内でoffice.example.com、ブラウザのアセット、検出エンドポイント、WebSocket 接続、および残りの Collabora パスを転送します。場所は Collabora のプロキシに関するガイダンスに従います。Nginxが WebSocket ヘッダーを正しく適用できるように、特定のソケットの場所は、より広範なcool/ルートよりも上位に配置してください。lool

Collaboraの上流にルーティングされるブラウザアセット、検出機能、および機能ごとに別々の場所に配置されたNginxサーバー構成。
Nginxのルーティングの抜粋:ブラウザのアセット、WOPIの検出、および機能はすべて同じCollaboraのアップストリームに渡されます。
server {
    listen 443 ssl;
    server_name office.example.com;

    ssl_certificate     /path/to/fullchain.pem;
    ssl_certificate_key /path/to/private-key.pem;

    location ^~ /browser {
        proxy_pass http://coolwsd;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $http_host;
    }

    location ^~ /hosting/discovery {
        proxy_pass http://coolwsd;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $http_host;
    }

    location ^~ /hosting/capabilities {
        proxy_pass http://coolwsd;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $http_host;
    }

    location ~ ^/cool/(.*)/ws$ {
        proxy_pass http://coolwsd;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_read_timeout 3600s;
    }

    location ^~ /cool/adminws {
        proxy_pass http://coolwsd;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_read_timeout 3600s;
    }

    location ~ ^/(c|l)ool {
        proxy_pass http://coolwsd;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

証明書のパスをホストのファイルに置き換えてください。インストールで管理コンソールを使用しない場合は、/cool/adminwsドキュメント編集に場所が必要ない場合があります。メイン/cool/.../wsルートは必須です。proxy_read_timeoutここでの1時間は例として示したもので、普遍的な要件ではありません。Nginxのデフォルトのプロキシ読み取りタイムアウトは、連続読み取りの間隔が60秒です。セッションに必要なアイドル期間よりも長い値を選択するか、サポートされている場合は適切なWebSocket pingトラフィックを利用してください。

3. CollaboraのTLSモードをプロキシホップに合わせる

プライベートなNginxからCollaboraへのホップでHTTPが使用されている場合でも、ユーザーはHTTPS経由でCollaboraにアクセスする必要があります。TLS終端構成では、coolwsdプロキシをTLS終端として扱うように設定してください。内部リスナーではSSLを無効にし、SSL終端を有効にします。これらの設定は、パッケージまたはコンテナイメージでサポートされている方法で適用し、Collaboraのドキュメントに従って再起動/リロードしてください。

HTTP 1.1、UpgradeおよびConnectionヘッダー、読み取りタイムアウトを設定したCollabora WebSocketルート用のNginxロケーション。
WebSocket ルートの抜粋: HTTP/1.1 と Upgrade/Connection ヘッダーにより、Nginx はエディタのライブ接続をトンネル化できます。読み取りタイムアウトは環境に合わせて調整してください。

HTTP アップストリームは信頼できるプライベート ネットワークでのみ使用し、ポート 9980 へのパブリック アクセスをブロックしてください。ポリシーで Nginx と Collabora 間で暗号化が必要な場合は、HTTPS アップストリームを使用し、証明書の検証を正しく構成してください。証明書の不一致を隠すために検証を無効にしないでください。Collabora のプロキシ設定ドキュメントでは、プロキシでの SSL とプロキシと 間の SSL を区別していますcoolwsd。

また、ストレージ統合における Collabora URL を、公開されている HTTPS ホスト名に設定してください。Nextcloud の場合、管理マニュアルでは、ブラウザと両方のサーバーが、一致する外部プロトコルを使用して HTTP(S) 経由で相互に通信できることが求められています。WOPI の許可リストは、想定されるストレージホストと Collabora アドレスに限定してください。プロキシルーティングエラーを解決するために、許可リストを広範囲に拡大しないでください。

4. 両側から構成をテストする

Nginxを再読み込みする前に、構文を確認してください。

sudo nginx -t
sudo systemctl reload nginx

Nginxがコンテナ内で実行されている場合は、そのコンテナの検証およびリロード手順を使用してください。Nextcloudホストから、実際のホスト名を使用して公開されているCollaboraエンドポイントをテストしてください。

curl -fsS https://office.example.com/hosting/discovery -o /dev/null
curl -fsS https://office.example.com/hosting/capabilities -o /dev/null

それらの HTTPS URL もユーザーのブラウザーから開いてください。到達可能性は確認されますが、検出応答が成功しただけでは、ドキュメント編集が機能していることは証明されません。ドキュメントを開き、ブラウザーのネットワーク パネルを使用して、アセットがロードされ、接続が/cool/.../ws開いたままになっていることを確認します。HTTP/1.1 WebSocket が成功すると、通常は が表示されます101 Switching Protocols。正確な表示はブラウザーとトランスポートによって異なる場合があります。この標準設定が Firefox では機能するのに Chromium では失敗する場合は、リクエスト メソッドとプロトコルを調べます。25.04 用に開かれた Collabora の問題報告では、HTTP/2 上の Chromium WebSocket が を使用しCONNECT、405 を受信したことが報告されています。2026 年 10 月 9 日現在、この問題は未解決のままです。これはバージョン固有の報告であり、普遍的な動作ではありません。HTTP/2 の設定を変更する前に、Collabora、Nginx、およびブラウザーのバージョンを比較してください。Collaboraの問題 12155を参照してください。

汎用的な空のドキュメントエディタの上に、Collaboraの検出エンドポイントへのcurlコマンドが表示されたターミナル画面。
検証ビュー:ターミナルには実行すべき検出チェックが表示され、エディタは別の実文書テストの準備ができています。この例では、結果は示されていません。

検出が失敗した場合は、Nginx のエラー ログを調べて、アップストリームのホスト名、ポート、プロトコルを確認してください。検出は成功したが編集が接続できない場合は、WebSocket のルート、ヘッダー、タイムアウト、および Collabora のログを確認してください。WOPI 認証エラーは、ストレージ ホストの許可リストに問題があることを示しています。Nextcloud Office のトラブルシューティング ガイドでは、ブラウザ、Nextcloud、および Collabora からの接続性を確認し、両方のサーバーのログを確認することを推奨しています。

Nginx WebSocketプロキシガイドでは、なぜUpgradeとをConnection明示的に渡す必要があるのか​​、またアイドルタイムアウトの動作が重要な理由について説明しています。ディレクティブの動作については、 Nginxプロキシモジュールのリファレンスを参照してください。チェックが完了したら、新しいルートをユーザーに利用させる前に、テストドキュメントを開いて編集し、保存して再度開いてください。

コメントを残す

CollaboraをNginxの背後に配置してもWebSocketが壊れないようにする方法

CollaboraをNginxの背後に配置してもWebSocketが壊れないようにする方法

NginxのTLS終端、Collaboraのルート、およびWebSocketヘッダーを設定し、実際のドキュメントを開く前に公開エンドポイントをテストしてください。

コード編集セッションが10分で終了しないようにする

コード編集セッションが10分で終了しないようにする

10分間のCODE切断の原因をプロキシ、ロードバランサー、またはWebSocketパスまで追跡し、タイムアウトを修正してセッションが接続された状態を維持することを確認してください。

Helmを使用してKubernetes上にCollabora CODEをデプロイする

Helmを使用してKubernetes上にCollabora CODEをデプロイする

Collabora公式Helmチャートをインストールし、WOPIアクセスとイングレスアフィニティを設定し、一般的な設定ミスがないかデプロイメントを確認します。

Collaboraの空白ドキュメントをトレースして、問題のあるレイヤーを特定する

Collaboraの空白ドキュメントをトレースして、問題のあるレイヤーを特定する

Collaboraが空白のドキュメントを開く理由を特定するために、ブラウザのリクエスト、WOPIログ、およびターゲットを絞ったプロキシチェックを使用し、証拠に合った修正方法を選択してください。

Collabora Online CODEで多言語スペルチェックを有効にする

Collabora Online CODEで多言語スペルチェックを有効にする

CODE Dockerの辞書を設定し、文書の該当箇所に正しくタグを付けることで、英語、フランス語、およびその他のサポートされている言語で適切なスペルチェックが行われるようにします。

Collaboraのアクティブなドキュメントビューのアイドルタイマーを設定する

Collaboraのアクティブなドキュメントビューのアイドルタイマーを設定する

coolwsdでビューごとの非アクティブしきい値を調整し、背景タブの暗転、ドキュメントのアンロード、自動保存、ログイン期限切れとは区別します。

Collabora CODEの更新チェックと不要な接続を無効にする

Collabora CODEの更新チェックと不要な接続を無効にする

定期的なCODE更新チェックを停止し、オプションのリモートサービスを確認し、ドキュメント編集を妨げることなくアウトバウンドネットワーク制御を使用できます。

SeafileとCollaboraを正しいWOPI URLに接続します。

SeafileとCollaboraを正しいWOPI URLに接続します。

Seafileで安全なドキュメント編集を有効にするには、デプロイメント用にCollaboraの検出URL、HTTPS、およびWOPIアクセスを設定してください。

Collaboraとデスクトップアプリ間のコピー&ペースト機能を復元する

Collaboraとデスクトップアプリ間のコピー&ペースト機能を復元する

システムクリップボードをテストし、ブラウザの権限を調整し、埋め込み型Collabora統合においてiframeポリシーの変更が必要なタイミングを特定します。

Collabora CODE Dockerでカスタムフォントを利用できるようにする

Collabora CODE Dockerでカスタムフォントを利用できるようにする

フォントファイルをDockerとCollaboraのシステムプレートにマウントすることで、カスタムフォントがエディタに表示され、ドキュメント内で正しくレンダリングされるようになります。