####実現したい事
https://sample-web.com/->3000ポート
https://sample-web.com/write->4000ポート
https://sample-web.com/read->5000ポート
上記のように1つのドメインで3つのアプリを下層パス毎に起動させています。
Node.jsの性質上の負荷分散のため、このような形でNginxでリバースプロキシを張り、運用したいと考えています。
実現したい事は、各ポートで起動しているapp.js内のsocket.io処理をそれぞれ別々に記述させたいと考えています。
####現状どうなっているのか
Nginx
1server { 2 listen 443 ssl; 3 ssl_certificate /etc/nginx/ssl/ssl.crt; 4 ssl_certificate_key /etc/pki/tls/certs/server.key; 5 server_name sample-web.com; 6 ssl_session_cache shared:SSL:1m; 7 ssl_session_timeout 5m; 8 ssl_ciphers HIGH:!aNULL:!MD5; 9 ssl_prefer_server_ciphers on; 10 ssl_protocols TLSv1.1 TLSv1.2; 11 ssl_stapling on; 12 resolver 000.000.000.000 valid=300s; 13 14 location /write { 15 proxy_pass http://sample-web.com:4000/; 16 proxy_set_header Upgrade $http_upgrade; 17 proxy_set_header Connection "upgrade"; 18 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 19 proxy_set_header Host $host; 20 proxy_http_version 1.1; 21 } 22 23 location /socket.io/ { 24 proxy_pass http://sample-web.com:4000; 25 proxy_set_header Upgrade $http_upgrade; 26 proxy_set_header Connection "upgrade"; 27 } 28 29 30 location / { 31 proxy_pass http://sample-web.com:3000/; 32 } 33}
javascript
1const express = require('express'); 2const app = express(); 3const http = require('http').Server(app); 4const io = require('socket.io')(http); 5 6//中略 7 8io.on('connection',(socket)=>{ 9 console.log('connect /write app socket.io connected'); 10}); 11 12http.listen(4000, function(){ 13 console.log('listening on *:4000'); 14}); 15 16
HTML
1<!--中略--> 2<script src="/socket.io/socket.io.js"></script> 3<script type="text/javascript"> 4var socket = io(); 5</script>
Nginxの/socket.io/要求がくれば、4000ポートのアプリに返しているため、
4000ポートで起動しているapp.js内であれば上記のconsole.logが出力されます。
しかし、3000ポート、5000ポートで起動しているapp.js内にもio処理を記述したのですが、
4000ポートのapp.jsでしかsocketの受付が行われません。
それぞれのポートで、io処理を行う+記述もそのポートで起動させているapp.js内に行う事は可能でしょうか?
何かヒントでもいいのでお知恵をお貸しいただければ幸いです。
####試した事
http://m-shige1979.hatenablog.com/entry/2017/07/31/080000
こちらのブログの記事を参考に、それぞれ記述を修正しました。
javascript
1//記事を参考に修正してみたapp.js(各ポート) 2const express = require('express'); 3const app = express(); 4const http = require('http').Server(app); 5const io = require('socket.io')(http); 6 7//中略 8io.of("/write(or read)").on("connect",function(){ 9 console.log('connect /各ポート app socket.io connected'); 10}); 11 12http.listen(各ポート(3000,4000,5000), function(){ 13 console.log('listening on *:各ポート(3000,4000,5000)'); 14});
html
1<!--中略--> 2<script src="/write(or read)/socket.io/socket.io.js"></script> 3<script type="text/javascript"> 4var socket = io.connect("https://resource-japan.com:4000/write(or read)"); 5</script>
結果は下記エラーで接続できませんでした。
GET https://sample-web.com/write/socket.io/socket.io.js 404 (Not Found) Refused to execute script from 'https://sample-web.com/write/socket.io/socket.io.js' because its MIME type ('text/html') is not executable, and strict MIME type checking is enabled.
あなたの回答
tips
プレビュー