質問: ### 前提・実現したいこと OnlyOfficeを起動するとブラウザのコンソールログにWSSエラーが残る。 WSSエラーを解決したい。 ※OnlyOffice自体を操作している分には不具合は感じないのが救い。 ### 発生している問題・エラーメッセージ まずWebブラウザのコンソールログのエラー ``` wss://oo.my-svr.com/5.4.1-39//doc/2953792654/c/611/nuy3qftb/websocket のサーバーへの接続を確立できませんでした。 wss://oo.my-svr.com/5.4.1-39//spellchecker/doc/2953792654/c/473/v2slqv2j/websocket のサーバーへの接続を確立できませんでした。 Chromium系だとエラー番号400がつきます。 ``` ### PLESK Onyxを使ってDockerを構築 コンテナを作る際、PLESKだと80ポート用、443ポート用の2つが強制的に作られる。 ``` sudo docker run -i -t -d -p 880:80 -p 3443:443 onlyoffice/documentserver ``` 当然ながら ドメイン:380ではコンテナにアクセスできますが、ドメイン:3443では接続を確立できません。 * Plesk内蔵のLet's Encryptを利用してサイトをSSL化しています。 * PleskにはDockerプロキシルールという設定があり、そこで80ポートで紐付けることができます。裏で自動的にnginx.confを書いているようです。 * PleskのDockerプロキシルール設定で443(3443)ポートを指定すると接続を確立できない。 OnlyOfficeを動かすサイトをoo.my-svr.comだとして、 **アクセス可能** 「Document Server is running」という成功表示がされます。 * http://oo.my-svr.com * http://oo.my-svr.com:380 * http://IPアドレス:380 * https://oo.my-svr.com **アクセス不可** 接続拒否、接続を確立できない。 * https://oo.my-svr.com:3443 * https://IPアドレス:3443 **OnlyOfficeのフロントエンドとしてNextcloudを利用** Nextcloudではhttps://oo.my-svr.com指定が必須。 Docker構築参考サイトGithub Dockerコンテナには上記を元に自己証明書を作っています。 サイト自体はLet's EncryptでSSL化ができていて、 80ポートでコンテナに繋がりOnlyOfficeに行く。 #### 試したこと。 * コンテナ内にcrt, keyファイルを置いてコンテナ内で自己証明を設置。 * コンテナ内のnginx.confに証明書の場所を書いて、(コンテナ内)nginxをリスタート。 * 逆に証明書をローカルに設置。 * Firewallで380と3443を開放。 * VirtualBoxにCentOS7.7を入れてDockerが動くまで構築して検証。 * 公式マニュアルの通りに「docker run -i -t -d -p 443:443」でコンテナを作成しても、結局は同じ結果。コンテナ内に入りIPを調べhttps://172.xx.xx.xでもアクセス拒否。https://localhostも拒否。 * 外部からはcurl (35) で期限切れ。これらすべて本番と同じ結果です。コンテナに対しHTTPS接続して期限切れというのは普通なんでしょうか? * 逆にコンテナ内に用意する自己証明書を無くして、指定ディレクトリも未設置・未設定。 → これだと純粋にLet's Encryptの証明書がコンテナまで行くのか淡い期待。しかし全く変化無し。つまりは、コンテナに証明書は要らない?? * oo.my-svr.comのnginx.confに下記のようなプロキシ設定を書いても全く影響なし。 ``` location .*/websocket$ { proxy_pass http://localhost:380; #またはproxy_pass http://localhost:3443; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } ``` ### 補足情報(FW/ツールのバージョンなど) * CentOS 7.7 * Docker 19.03.4 * Plesk Onyx 17.8.11
回答: PLESKは使っていないので見当違いかもしれませんが、wssで通信できない原因はnginx.confの間違いではないでしょうか。 `location .*/websocket$` → `location ~ .*/websocket$` 正規表現でマッチさせているようなので`~`が必要です。 あと、コンテナとhttpsで通信できていない原因は、自己署名証明書をつかっているとのことなので、それを受け入れるようになっていないためではないでしょうか。 ローカルでのコンテナとの通信を暗号化したい理由が特にないのでしたら、ここの部分でがんばる意味はないと思います。