同时使用HTTP和HTTPS(Express.Io)



我已成功登录443端口,可以通过https访问服务器,但无法通过http访问。

var fs = require('fs')
options = {
    ca : fs.readFileSync('./ssl/site.com.pem'),
    key: fs.readFileSync('./ssl/site.com.key'),
    cert: fs.readFileSync('./ssl/site_com.crt')
}
var app = require('express.io')
app.https(options).io()
....
app.listen(443);

我尝试过使用http和https模块:

app.http().io();
http.createServer(app).listen(80);
https.createServer(options, app).listen(443);

但这次socket.io在浏览器中给出了404。我该如何解决这个问题?我需要使用Express.Io的socket连接,因为应用程序是基于它的。

您应该将http重定向到https

 var express = require('express'),
 app = express(),  
 httpapp = express();
  //........................
 var credentials = {key: privateKey, cert: certificate, ca: ca};
 var httpsServer = https.createServer(credentials, app);
 var httpServer = http.createServer(httpapp);

 httpsServer.listen(443);
 httpServer.listen(80); 

 httpapp.route('*').get(function(req,res){  
    res.redirect('https://yourdomain.com'+req.url)
 });

几天前也遇到了同样的问题,这次GitHub问题起到了帮助作用:https://github.com/techpines/express.io/issues/17#issuecomment-26191447

你的代码是正确的,它只需要一些更改。下面的代码是您提供的代码片段的一个稍微修改过的版本。

var fs = require('fs'),
    express = require('express.io');
options = {
    ca : fs.readFileSync('./ssl/site.com.pem'),
    key: fs.readFileSync('./ssl/site.com.key'),
    cert: fs.readFileSync('./ssl/site_com.crt')
};
var app = express();
app.https(options).io();
var httpServer = require('http').createServer(app);
// ...
app.listen(443);
express.io.listen(httpServer);
httpServer.listen(80, function() { }, function() { });

最新更新