2017-10-19 118 views
0

我設立一個服務的NodeJS子域,這樣我可以使用socket.io。我通過https服務頁面,並且讓服務器正常運行。該頁面已送達。這不是問題。問題是當我嘗試將套接字連接到客戶端時。我一直試圖解決這個問題,我確信有很多有能力的人可以幫助我。服務器的NodeJS HTTPS運行,但插座將無法連接(網:: ERR_CONNECTION_TIMED_OUT)

這是我的地盤https://reward.cshive.com

錯誤消息我得到:

Error message

客戶端

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

服務器端

const https = require('https'); 
var fs = require('fs'); 
const options = { 
    key: fs.readFileSync('/etc/letsencrypt/live/reward.cshive.com/privkey.pem'), 
    cert: fs.readFileSync('/etc/letsencrypt/live/reward.cshive.com/cert.pem') 
}; 
var app = https.createServer(options, (req, res) => { 
    fs.readFile(__dirname + '/served.html', 
    function (err, data) { 
    if (err) { 
     res.writeHead(500); 
     console.log('Error loading page'); 
     return res.end('Error loading page'); 

    } 
    console.log('--Connection'); 
    res.writeHead(200); 
    res.end(data); 
    }); 
}) 



var server = app.listen(3000, function(err) { 
    if (err) { 
     console.log(err); 
    } else { 
     console.log("Listening on port 3000"); 
    } 
}); 
var io = require('socket.io').listen(server); 
+0

當你說「的頁面送達」,你的意思是哪一頁?我最初認爲你的意思是代碼中提到的頁面(來自文件'served.html'),但我似乎無法訪問它。我無法從端口3000獲得任何響應,所以它可以是代理或防火牆問題,也可以是服務器甚至沒有運行的簡單事情。 – skirtle

+0

對不起,我應該進一步澄清。我的意思是,文件serve.html由節點提供服務。我知道這一點,因爲當我不做「node server.js」時,我從nginx得到一個「502壞的網關」。我確實設置了proxy_pass以允許通過位於我的位置塊中的端口3000的請求可用。如果能幫助解決問題,我會在學校回來時添加配置。但是,你的意思是防火牆。哪一個? –

+1

我還沒有嘗試過自己,但這個看起來像,而不是試圖直接暴露節點到世界上的3000端口https://gist.github.com/uorat/10b15a32f3ffa3f240662b9b0fefe706 – skirtle

回答

0

試試這個在您的

將這個服務器部分,路徑socket.io可能change.For我這是/socket.io-client/

location /socket.io-client/ { 
      proxy_pass http://node_server; 
      proxy_http_version 1.1; 
      proxy_set_header Upgrade $http_upgrade; 
      proxy_set_header Connection "upgrade"; 
      proxy_redirect off; 

      proxy_buffers 8 32k; 
      proxy_buffer_size 64k; 

      proxy_set_header X-Real-IP $remote_addr; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
      proxy_set_header Host $http_host; 
      proxy_set_header X-NginX-Proxy true; 
     } 

而且這

upstream node_server { 
    server 127.0.0.1:8080; 
    keepalive 15; 
} 

而且這樣做

var socket = io.connect();你不會需要指定主機

+0

謝謝,這不是我需要解決的問題。但肯定是修復 –

+0

我建議讓nginx的處理所有SSL相關的東西和節點JS擺脫它的主要部分。 當我看到你最終在這兩個節點JS進行SSL以及nginx的做法。 不妨讓nginx的做到這一點。 –

+0

那麼,我試圖在nodejs中創建一個http服務器。但瀏覽器會拒絕加載資源,因爲它們會被標記爲不安全。 –

相關問題