2017-10-19 116 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服务器。但浏览器会拒绝加载资源,因为它们会被标记为不安全。 –

相关问题