簡體   English   中英

是否可以從NGINX(端口443)獲得SSL頁面,並在端口3000上使用socket.io(通過Node.js)

[英]Is it possible to have an SSL page from NGINX (port 443) also use socket.io (through Node.js) on port 3000

我開發了一個Node.js應用程序,該應用程序使用socket.io實時發出一些基於JSON數組的內容,這些內容可以發送到10到100台客戶端計算機中的任何位置。

它運行良好,我對Node.js的速度和可靠性感到震驚,現在我正准備將其移至生產環境,並希望使用https(我已在NGINX上成功配置了https(在Ubuntu 14.04服務器上運行)我的網絡)。

我遇到的問題是,當我使用URL的HTTPS(ssl)版本時,頁面可以正常加載,但是對於Web套接字,由於內容混合,我收到了套接字錯誤。 (注意:目前我已經將NGINX設置為同時服務於SSL和非SSL版本,但最終我希望它僅提供SSL版本)

我已經嘗試(在客戶端中)將https用於套接字連接,如下所示:

var socket = io.connect('https://mycooldomaingoeshere.com:3000');

這是我在NON SSL測試中成功使用的代碼(server.js和test.html):

//FILE NAME: SERVER.JS

var app = require('express')();
var http = require('http').Server(app); // for node to serve clients
var io = require('socket.io')(http); // socket.io bidirectional from node.js to clients

// THE JSON DATA I WILL EMIT TO CONNECTED CLIENTS...
var myJSON = [{"array":[1,2,3],"boolean":true,"null":null,"number":123,"object":{"a":"b","c":"d","e":"f"},"string":"Hello World"}];

// THE HTML PAGE THAT I WILL SERVE TO CLIENTS CONNECTED ON PORT 3000...
app.get('/', function(req, res) {
    res.sendFile(__dirname + '/test.html');  // note, all connecting clients get served this ONE page
});

// UPON SUCCESSFUL CONNECTION TO THE PORT (3000)...
io.sockets.on('connection', function(socket) {

    console.log('connected the new client!');

    setInterval(function(){
        // EMIT OUT THE JSON ARRAY TO CLIENTS EVERY 3 SECONDS
        socket.volatile.emit('passingJSON', myJSON); //emit to all clients
    }, 3000);
}); 

// OK, LETS LISTEN FOR ANY CLIENTS TRYING TO CONNECT ON PORT 3000
http.listen(3000, function() { //listen to 3000
    console.log('listening on *:3000...');
});

這是為客戶提供服務的頁面(test.html):

<html>
<head>

<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
<script src="http://code.jquery.com/jquery-1.11.1.js"></script>

<script>

$(document).ready(function(){
     var socket = io.connect('http://localhost:3000');

    // HERES SOMETHING THE NODE.JS SERVER CAN 'CALL' OR INVOKE...
    socket.on('passingJSON', function(data) {
            console.log(data);
            console.log(new Date().toLocaleString());  
    });
});

</script>
</head>

<body>
    this is a test page that uses node.js and socket.io
</body>
</html>

我正在使用的Node和NPM軟件包版本是:

  • socket.io v1.4.5
  • 快遞v4.13.4
  • npm v3.9.5
  • node.js v6.2.2

我的問題是我需要添加什么代碼或使socket.io能夠在父頁面的HTTPS起源內/旁邊工作?

我建議僅使用如下客戶端連接:

var socket = io.connect();

這應該做的是自動適應httpshttp

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM