[備忘録] Rocket ChatをNginxのリバースプロキシ下で運用する際の設定

Rocket ChatをNginxのリバースプロキシ下で運用する際、いくつか公式のものから設定を見直す必要があったので、まとめておきました。


Rocket Chatのセットアップでの注意点

環境変数のROOT_URLの設定間違いに注意

ROOT_URL=https://hoge.example.com PORT=3000

ROOT_URLは必ず実際に運用する際のドメイン名、SSL通信にする場合はHTTPSにすることを忘れずに。一方でポートはNginxでプロキシをかけるので3000のままでOK。


NGINXのリバースプロキシの設定での注意点

リバースプロキシ設定時のproxy_passに注意

# Upstreams
upstream backend {
    server localhost:3000;
}

# HTTPS Server
server {
    listen 443;
    server_name hoge.example.com;
    ssl on;
    
    # 中略

    location / {
        proxy_pass http://backend; # ここの最後のスラッシュは不要
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto http;
        proxy_set_header X-Nginx-Proxy true;

        proxy_redirect off;
    }
}

公式のドキュメントに記載されているNginxの設定ファイルにはproxy_passの最後にスラッシュが記入されていますが、そうするとドメインを使ってアクセスしたときにエラーが…. (ログイン画面が出ません)。なので、最後のスラッシュは入れずに。あと、証明書の設定とかをRocket Chat自体にはしていないのでhttp通信でOK。 (その代わり、セキュリティ確保のために3000番は外部アクセスできないようにしておこう)


Rocket ChatのOmnichannel / live chat設定時の注意点

Omnichannel / live chat (以下live chat)は、ウェブサイトとかによくあるお問い合わせ用のライブチャットを設置して、そのお問い合わせをRocket Chatで受けることができる、という機能です。

これを設定する際、2点注意しなければいけません。

CORSポリシーに注意

Rocket Chatでは、デフォルトでCORSポリシーがSAMEORIGINとなっています。これだと、同一ドメインでlive chatを展開する場合以外 (基本的にそうですよね?)はポリシーに引っかかってうまくlive chatのコードを動かすことができません。

設定→全般→X-Frame-Optionsのオプションで適切なポリシーを設定してあげましょう。ただ、ここで変更したCORSポリシーはRocket Chat全体のポリシーを変更することになってしまうので、その点、要注意です (アカウントの削除などを無効にするなど、想定外の動作を誤ってしないような設定が必要です)。

もし、うまいことlive chatのCORSポリシーだけ変更する方法をご存知の方がいたら教えて下さい…

Websocket通信のための設定に注意

最後に、live chatの通信ではWebsocketを使用しますが、これにはRocket ChatのREST APIの設定を一部変更する必要があります。

設定→全般→REST API→「CORSを有効にする」を有効化することで、Websocket通信が行えるようになります。逆に、これを有効にしないと、Websocket通信がうまくできず、チャットの送信はできるのにリアルタイムの受信ができなかったりします。