ONLYOFFICE DocsをHAProxyの背後に配置しても編集機能が損なわれないようにする方法

ONLYOFFICE DocsをHAProxyの背後で実行するには、プロキシでHTTPSを終端し、元のホストとスキームを転送し、長時間のWebSocket接続を許可します。まずは正常に動作するドキュメントサーバーを1台用意し、HAProxyがリクエストを分散できるという理由だけで追加するのではなく、ONLYOFFICEのデプロイメントがサポートされているマルチノード運用に対応するように構成されている場合にのみ、バックエンドを追加してください。

HAProxyは2つの独立したドキュメントサーバーの負荷分散を行うことができますか?

HAProxyはHTTPリクエストをノード間で分散できますが、それだけで2つの独立したONLYOFFICEインストールが連携した編集クラスタになるわけではありません。エディタセッションには永続的な接続とアプリケーションの状態があります。公式のONLYOFFICEアクティブ/アクティブサンプルでは、​​バックエンドのヘルスチェックと永続化Cookieを使用していますが、これらはルーティングメカニズムであり、エディションに必要な共有サービスやアプリケーションレベルのアーキテクチャの代替となるものではありません。

従来のシングルサーバーインストールの場合、docs1以下のバックエンドでのみ使用してください。2ノード構成の場合は、まずONLYOFFICEの導入ドキュメントまたはベンダーサポートで、クラスタアーキテクチャ、サポートされているエディション、共有依存関係、バージョン互換性、およびJWT構成を確認してください。例のアドレス(10.0.10.21および10.0.10.22)は、検出されたホストではなく、説明用のプライベートIPアドレスです。

HAProxyを編集する前に、何が正常に動作していることを確認する必要がありますか?

公開名はdocs.example.com、HAProxyエンドポイントに解決される必要があります。HAProxyは、受信TCPポート80と443、およびポート80で各ドキュメントサーバーへのプライベートネットワークアクセスを必要とします。ドキュメント管理アプリケーションは、公開Docsアドレスにアクセスできる必要があり、ONLYOFFICEはドキュメントを取得してアプリケーションにコールバックを送信できる必要があります。バックエンドHTTPは非公開に保ち、信頼できないネットワークを経由する場合は、バックエンドホップを個別に暗号化してください。

  1. プロキシ ホストから各ドキュメント サーバーを確認します。を実行しcurl -i http://10.0.10.21/healthcheck、存在する場合は を実行しますcurl -i http://10.0.10.22/healthcheck。通常、動作状態エンドポイントは の本文とともに HTTP 200 を返しますtrue。 ルーティング、ファイアウォール、またはサーバーの状態のいずれかが失敗した場合は、負荷分散を構成する前に調査してください。
  2. 固定のJWTシークレットを確認してください。ドキュメントサーバーとそのコネクタは、トークンシークレットについて合意する必要があります。Dockerインストールの場合、ONLYOFFICEはJWT_SECRET環境変数について説明しています。Docs 7.2以降、自動生成されたシークレットに依存すると、再作成または再起動後に統合エラーが発生する可能性があります。サポートされているマルチノード展開では、ベンダーのアーキテクチャに従って、ノード間でシークレットを整合させてください。
ターミナルで http://10.0.10.21/healthcheck をチェックし、レスポンスボディに true を含む HTTP 200 を表示します。
バックエンドのヘルスチェックリクエストがHTTP 200とtrueを返すと、サーバーはHAProxyに追加されます。

これらのチェックは、ベンダーのDockerインストール手順およびJWT設定手順に従って行われます。プロキシエラーを回避するためだけにJWTを無効にしないでください。

HTTPSの設定方法と、正しいヘッダーを転送する方法を教えてください。

ステップ1:証明書を準備する

信頼できる証明書を取得しますdocs.example.com。この Linux の例では、HAProxy は証明書チェーンと秘密鍵を含む PEM ファイルを読み取ります。証明書が既に別の場所に存在する場合は、そのパスを置き換えてください。結合された PEM へのアクセスを制限し、証明書の更新時に再構築するように設定してください。

sudo install -d -m 700 /etc/haproxy/certs
sudo sh -c 'umask 077; cat /etc/letsencrypt/live/docs.example.com/fullchain.pem /etc/letsencrypt/live/docs.example.com/privkey.pem > /etc/haproxy/certs/docs.example.com.pem'
Ubuntuのターミナルに、証明書ディレクトリ、docs.example.comのPEMファイル、および制限されたファイル権限が表示されています。
証明書と秘密鍵は、HTTPSリスナー用の保護されたPEMファイルに格納されます。

ステップ2:フロントエンドとバックエンドを追加する

既存の設定をバックアップし/etc/haproxy/haproxy.cfg、ディストリビューション固有のログ設定やサービス設定を盲目的に置き換えるのではなく、以下のセクションを参考に設定を調整してください。これは、最新のHAProxyリリース向けの構成例です。リダイレクトにはHTTPのみを受け入れ、HTTPSはポート443で終端し、パブリックホストとスキームを転送し、アプリケーションの健全性エンドポイントを監視します。

global
    log /dev/log local0

defaults
    mode http
    log global
    option httplog
    option forwardfor
    timeout connect 5s
    timeout client 60s
    timeout server 60s
    timeout tunnel 1h

frontend docs_http
    bind :80
    http-request redirect scheme https code 301

frontend docs_https
    bind :443 ssl crt /etc/haproxy/certs/docs.example.com.pem
    http-request set-header X-Forwarded-Proto https
    http-request set-header X-Forwarded-Host %[req.hdr(Host)]
    default_backend docs_nodes

backend docs_nodes
    option http-server-close
    balance roundrobin
    cookie SERVERID insert indirect nocache
    option httpchk GET /healthcheck
    http-check expect string true
    server docs1 10.0.10.21:80 check cookie docs1
    server docs2 10.0.10.22:80 check cookie docs2
HAProxyの設定エディタに、TLSフロントエンドと2つのプライベートドキュメントサーバーバックエンドアドレスが表示されています。
HAProxyの設定では、パブリックTLSリスナーと内部ドキュメントサーバーバックエンドを分離します。上記の指示をすべて使用してください。

2番目のノードが本当に準備完了でない限り、このdocs2行を削除してください。永続化クッキーは、後続のHTTPリクエストが選択されたノードに戻るのに役立ちます。HAProxyは、特別なURL書き換えなしでHTTP WebSocketのアップグレードを処理し、アイドル状態timeout tunnel 1hのアップグレード済み接続が通常のリクエストよりも長く開いたままになることを許可します。この動作については、HAProxy WebSocketのドキュメントを参照してください。

ここでは、このフロントエンドがパブリックHTTPSを終端するため、 を設定するX-Forwarded-Protoのhttpsが適切です。インターネットに接続されたエッジで、クライアントから提供された任意の転送スキームやホストを信頼しないでください。ONLYOFFICEプロキシのドキュメントでは、外部URLコンテキストを保持するためにX-Forwarded-Proto、と を明示的に指定しています。X-Forwarded-Host

ロードバランサーの再起動とテストはどのように行うべきですか?

ステップ3:トラフィックを切り替える前に検証する

再読み込みする前に構文を確認してください。終了ステータスがゼロ以外の場合は、続行する前に報告された構成エラーまたは証明書エラーを解決する必要があります。

sudo haproxy -c -f /etc/haproxy/haproxy.cfg
sudo systemctl reload haproxy
curl -i https://docs.example.com/healthcheck
HAProxyの設定検証コマンドと有効な設定メッセージが表示されたターミナル。
サービスのリロード前にhaproxy.cfgを検証してください。構文検証が成功したとしても、編集テストの代わりにはなりません。

パブリックヘルスチェックの応答では、trueバックエンドが正常な場合は HTTP 200 と表示されます。HAProxy は、option httpchkおよびhttp-check expectディレクティブを使用して、失敗したノードを新規リクエストのローテーションから除外します。ヘルスチェックのリファレンスを参照してください。チェックに合格したからといって、ドキュメントの編集やコールバックの配信が機能しているとは限りません。

ステップ4:編集、WebSockets、および保存を確認します

ONLYOFFICE Docsに接続された文書管理システムなど、統合アプリケーションを介して文書を開きます。ブラウザの開発者ツールで、ネットワークパネルを使用してWebSocket接続を検査します。アップグレードハンドシェイクは成功するはずで、通常はHTTPステータスが表示されます101 Switching Protocols。少し編集を加え、エディタを閉じ、文書を再度開いて、変更が保存されたことを確認します。適切にサポートされている2ノード構成の場合、メンテナンス期間中に2人目のコラボレーターと計画されたシングルノードドレインもテストしてください。

パブリックヘルスチェックが成功してもエディタがフリーズしたり切断された場合は、混合コンテンツの警告、WebSocketの失敗、JWTの不一致、およびドキュメントアプリケーションが指定されたDocs URLにアクセスできるかどうかを確認してください。ドキュメントが開いたまま保存されない場合は、HAProxyのラウンドロビンポリシーを変更するのではなく、ドキュメントサーバーからソースアプリケーションへのコールバックの到達可能性を調査してください。アクティブなWebSocketセッションが中断された場合、クライアントの再接続が必要になる場合があります。バックエンドのヘルスチェックは、シームレスな編集フェイルオーバーを保証するものではありません。

最終検証:パブリックヘルスエンドポイントと実際の編集・再開テストの両方が合格する必要があります。検証済みでサポートされているノードのみをローテーションに含め、証明書の更新時に正しいPEMが再ロードされることを確認し、HAProxyログを監視して、502/503応答の繰り返しや予期しないWebSocket切断が発生しないようにしてください。

コメントを残す

OpenSCAPを使用してSLES 15 STIGを安全に適用する

OpenSCAPを使用してSLES 15 STIGを安全に適用する

SUSEがサポートするSTIGプロファイルを使用して、SLES 15のスキャン、修復テスト、残りの検出結果の確認、および評価証拠の保持を行ってください。

SUSE Linux Enterprise ServerへのCockpitアクセスを復元する

SUSE Linux Enterprise ServerへのCockpitアクセスを復元する

SUSEの最新のガイダンスに従って、DNS、ポート9090、systemdソケット、firewalld、TLS、およびログイン設定を通じて、Cockpit接続の失敗を追跡してください。

SLES 15ボンディングによる信頼性の高いイーサネットフェイルオーバーの設定

SLES 15ボンディングによる信頼性の高いイーサネットフェイルオーバーの設定

YaSTとWickedを使用してSLES 15上に冗長イーサネット接続を作成し、アクティブ/バックアップボンディングを構成して、両方のポートとフェイルオーバーを確認します。

SLES 15インストール用の再利用可能なAutoYaSTプロファイルを作成する

SLES 15インストール用の再利用可能なAutoYaSTプロファイルを作成する

既存のSLES 15システムをレビュー済みのAutoYaSTプロファイルに変換し、検証を行い、それを使用して手動の手順を減らしてテストサーバーをデプロイします。

SLES 15 KVM セットアップ: 選択した仮想マシンを起動時に自動的に起動するように設定

SLES 15 KVM セットアップ: 選択した仮想マシンを起動時に自動的に起動するように設定

SLES 15 KVMおよびlibvirtツールをインストールし、適切なホストサービスを有効にし、選択した仮想マシンが再起動後に起動するように設定します。

systemdシャットダウン画面でハングアップするSUSEサーバーを診断する

systemdシャットダウン画面でハングアップするSUSEサーバーを診断する

systemdジョブと前回の起動ジャーナルを使用して、遅いサービス、マウント、またはストレージの依存関係を特定し、原因を隠蔽することなく修正します。

SLES 15サーバーに必要なWebトラフィックのみを許可する

SLES 15サーバーに必要なWebトラフィックのみを許可する

firewall-cmd を使用してアクティブゾーンを検査し、HTTP を安全に許可し、SSH アクセスを維持し、SLES 15 でルールが再読み込み後も有効であることを確認します。

ロックアウトせずにSLES PAMログイン失敗を診断する

ロックアウトせずにSLES PAMログイン失敗を診断する

PAMの障害が発生した原因を、サービス、アカウントポリシー、またはIDプロバイダーに特定し、正常に動作する管理者セッションを維持しながら、適切なSLES構成を修復します。

SLES 15セキュアブートにカスタムカーネルモジュールをインストールして署名する

SLES 15セキュアブートにカスタムカーネルモジュールをインストールして署名する

セキュアブートを無効にせずに、カスタムSLES 15カーネルモジュールをロードします。実行中のカーネルと一致させ、.koファイルに署名し、MOKキーを登録し、ロードが成功したことを確認します。

ResticとCronを使用して、Nextcloudのバックアップを自動化し、一貫性を保つ

ResticとCronを使用して、Nextcloudのバックアップを自動化し、一貫性を保つ

NextcloudのファイルとMariaDBをまとめてバックアップし、cronを使って暗号化されたResticスナップショットをスケジュール設定し、稼働中のサーバーにリスクを負わせることなく復旧を検証します。