前提・実現したいこと
????実現したいこと
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で書かれているため、何をやってるかはわかりますが、問題箇所が特定できません。
あなたの回答
tips
プレビュー