質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

Docker

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

proxy

proxy(プロキシー)は、企業などの内部コンピュータとインターネットの中間に位置し、例えば直接インターネットに接続できない内部コンピュータの代理としてインターネットに接続する等をするシステム、もしくは代理として機能を実行するソフトウェアです。内部ネットワークへのアクセスを一元管理し、内部からの特定の種類の接続以外を遮断すること、外部からの不正アクセスを拒否することなどに用いられます。

Q&A

0回答

629閲覧

Dockerコンテナ上のNginxから他コンテナへのWebsocketリバースプロキシについて

Aikikasa1

総合スコア12

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

Docker

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

proxy

proxy(プロキシー)は、企業などの内部コンピュータとインターネットの中間に位置し、例えば直接インターネットに接続できない内部コンピュータの代理としてインターネットに接続する等をするシステム、もしくは代理として機能を実行するソフトウェアです。内部ネットワークへのアクセスを一元管理し、内部からの特定の種類の接続以外を遮断すること、外部からの不正アクセスを拒否することなどに用いられます。

0グッド

3クリップ

投稿2018/07/14 11:35

編集2022/01/12 10:55

前提・実現したいこと

????実現したいこと
1.CentOS7.4のファイアウォールからDockerコンテナ上のNginxへポートフォワーディング
2.Nginxから同じDocker Networkのコンテナ上で動くGottyへリバースプロキシ ← ここで詰まっています

????環境
・ホスト・コンテナOS : CentOS7.4(さくらVPS)
・Docker version : 18.05
・Nginx varsion : 1.15

????補足
・Docker Networkはデフォルトと別に作成(192.168.1.0/24)
・NginxコンテナのIPアドレス:192.168.1.240
・GottyコンテナのIPアドレス:192.168.1.151
・ホストCentOSのFirewall-zoneの設定については、Docker Network : Public, WAN側 : External となっています。
・GottyはブラウザからLinuxのbashを弄れるアプリです。バックエンドとWebsocket経由で同期しています。
https://github.com/yudai/gotty

発生している問題・エラーメッセージ

Gottyのバックエンド側で見えているエラー

2018/07/14 10:58:11 192.168.1.240:58714 200 GET /l6tfxuw6/ 2018/07/14 10:58:11 192.168.1.240:58716 200 GET /l6tfxuw6/auth_token.js 2018/07/14 10:58:11 192.168.1.240:58718 200 GET /l6tfxuw6/config.js 2018/07/14 10:58:11 New client connected: 192.168.1.240:58720, connections: 1/0 2018/07/14 10:58:11 Connection closed by an error: failed to create backend: failed to start command `..`: exec: "..": executable file not found in $PATH: 192.168.1.240:58720, connections: 0/0

192.168.1.240が、Nginxが動くコンテナのIPアドレスです。
Websocketではないプロキシは上手く動いており、Gottyの黒い画面までは出て、Connection Closeとなります。
本エラー発生時にNetstatコマンドでNginxコンテナのポートを確認したところ、58720は閉じていました。
ブラウザ側には、101のコードが返っており、Javascriptのエラーは発生しておりません。
Websocketに詳しくないのですが、上記の通りハンドシェクは成功しているように見えます。
そのあとコネクションが維持されないようです。

該当のソースコード

Nginxの設定ファイル
????/etc/nginx/nginx.conf(ほぼ弄っていません。)

user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; }

/etc/nginx/conf.d以下の設定ファイル

server { listen 8080; server_name localhost; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_redirect off; proxy_read_timeout 60000; location /l6tfxuw6/ { proxy_pass http://192.168.1.151:8080/l6tfxuw6/; } location /l6tfxuw6/ws { proxy_pass http://192.168.1.151:8080/l6tfxuw6/ws; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; }

192.168.1.151はGottyコンテナのIPアドレスです。
l6tfxuw6はgottyの-rオプションで付加されるURLのランダム文字列です。

以上、アドバイスのほどよろしくお願いします。

以下、追記

ブラウザにConnection closeと表示された後、
chromeのコンソールで、new websocket をすると通ることが分かりました。
Gottyで実装されている new websocket と全く同じ引数です。
したがって、おそらくGottyのフロント側の実装に問題があるような気がします。
TypeScriptで書かれているため、何をやってるかはわかりますが、問題箇所が特定できません。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問