🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
HTTPS

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

2回答

1665閲覧

OnlyOffice(Docker)でのWSSエラーを解消したい

退会済みユーザー

退会済みユーザー

総合スコア0

HTTPS

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2019/11/11 14:15

編集2019/11/12 11:47

前提・実現したいこと

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」という成功表示がされます。

アクセス不可 接続拒否、接続を確立できない。

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

コメントと間違えて回答に書いてしまったので削除します。

投稿2019/11/14 11:22

編集2019/11/14 11:24
bsdfan

総合スコア4794

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

PLESKは使っていないので見当違いかもしれませんが、wssで通信できない原因はnginx.confの間違いではないでしょうか。

location .*/websocket$ → location ~ .*/websocket$

正規表現でマッチさせているようなので~が必要です。

あと、コンテナとhttpsで通信できていない原因は、自己署名証明書をつかっているとのことなので、それを受け入れるようになっていないためではないでしょうか。
ローカルでのコンテナとの通信を暗号化したい理由が特にないのでしたら、ここの部分でがんばる意味はないと思います。

投稿2019/11/13 00:44

bsdfan

総合スコア4794

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/11/13 01:18

ありがとうございます。 今回初めてDockerに触れています。なんで公式サイトに忠実に従って設定していました。 自己署名証明書については「openssl s_server -tls1_2 -accept 443 -www -cert server.crt -key server.key」コマンドを実行して動作はしているようです。 現在は自己署名証明書は取り除いた状態です。それを入れようが入れまいが挙動が全く変わらないです。 公式サイトにはCAからの証明書を持っているのであれば、コンテナでの証明書設置は無視してOKとは書かれています。Let's EncryptでサイトをSSL化している。つまりは自己署名証明書は要らないということで良いのでしょうか? nginxですが「location ~ .*/websocket$」にしてみましたが、これも良くも悪くもまったく変化がありません。「5.4.1-39」が含まれた正規表現マッチにしてもできません。
bsdfan

2019/11/13 03:24

今回のケースでは、前段(PLESKのnginx)でSSL化してあるので、その後ろにあるコンテナではSSL化は不要です。 なので自己署名証明書は要らないです。 PLESKが裏でどう動いているのか分かっていませんが、 コンテナのポート80を適当なポートにマッピングして、nginxでそこに転送すれば動くと思います。 それでだめなら、あとは、nginx.confのチェックや、nginxのログでどう動いているかを確認するかですが、 PLESKやOnlyOffice固有の問題があったら私にはわからないです。 $ sudo docker run -d -p 10080:80 onlyoffice/documentserver [nginx.conf] server { listen 443 ssl; server_name oo.my-svr.com; location / { proxy_pass http://127.0.0.1:10080; proxy_set_header Host $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 $scheme; } location ~ /websocket$ { proxy_pass http://127.0.0.1:10080; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }
退会済みユーザー

退会済みユーザー

2019/11/14 01:28 編集

ありがとうございます。 その例のように127.0.0.1、サーバーIPにしてもダメでした。 直接nginx/conf.d/にconfファイルを置いて、上記のようにしてもダメでした。 サーバーのログを見ていても、ウェブブラウザのログと同じですね。
退会済みユーザー

退会済みユーザー

2019/11/14 01:29 編集

エラーログの内容です。ブラウザのエラーログ表示にそっくりです。 2つめのエラーはごく稀に発生します。 [error] 5156#0: *19194 upstream prematurely closed connection while reading response header from upstream, client: CLIENT-IP-ADDRESS, server: oo.my-svr.com, request: "GET /5.4.1-39//doc/1080463105/c/522/42qmex0j/websocket HTTP/1.1", upstream: "http://0.0.0.0:380/5.4.1-39//doc/1080463105/c/522/42qmex0j/websocket", host: "oo.my-svr.com" [error] 26520#0: *5250 upstream prematurely closed connection while reading response header from upstream, client: CLIENT-IP-ADDRESS, server: oo.my-svr.com, request: "POST /5.4.1-39//doc/3348949102/c/397/khzqzvpe/xhr?t=1573692518919 HTTP/2.0", upstream: "http://0.0.0.0:380/5.4.1-39//doc/3348949102/c/397/khzqzvpe/xhr?t=1573692518919", host: "oo.my-svr.com", referrer: "https://oo.my-svr.com/5.4.1-39//web-apps/apps/documenteditor/main/index.html?_dc=5.4.1-39&lang=en&customer=ONLYOFFICE&frameEditorId=iframeEditor"
bsdfan

2019/11/14 11:24

upstream prematurely closed connectionはタイムアウト関係が原因のことが多そうですね。 おそらくnginx.confの問題だと思われるのでhttps://github.com/ONLYOFFICE/document-server-proxy/blob/master/nginx/minimal.confあたりを参考に試してみてはどうでしょうか。
退会済みユーザー

退会済みユーザー

2019/11/15 00:58

Plesk無視して/etc/nginx/conf.d/onlyoffice.confに upstream websocket { server IP-ADDRSS:380; } を作り、 1. まずPlesk内のnginx.conf*で proxy_pass http://websocket へ。  *Pleskは基本Plesk内でnginx.conf(server{}内)を書きます。PleskはいくつかのPlesk生成nginx.confをインクルードしています。その次にユーザーが調整できるnginxがあります。 2. 次にPlesk内nginxをクリアし、/etc/nginx/conf.d/内に直接すべてを書いてしまう。  このやり方でもwssエラーはとれませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問