Nodejs SSL for SockJS + Express



我在nodejs中有一个简单的SockJSExpress服务器。现在我想为这些服务器添加SSL support

这是我的服务器代码:

var sockjs = require('sockjs');
var my_http = require("http");
var https = require('https');
var fs = require('fs');

var options = {
    key: fs.readFileSync('test/keys/key.pem'),
    cert: fs.readFileSync('test/keys/cert.pem')
};
// Create a service (the app object is just a callback).
var app = express();
// Create an HTTP service.
http.createServer(app).listen(8008);
// Create an HTTPS service identical to the HTTP service.
https.createServer(options, app).listen(443);

var echo = sockjs.createServer({
    log: function (severity, message) {}
});
echo.on('connection', function (conn) {
    conn.on('data', function (message) {
        conn.write(message);
    });
    conn.on('close', function () {
    });
});
var server = my_http.createServer();
echo.installHandlers(server, {
    prefix: '/echo'
});
server.listen(8081, '0.0.0.0');
var server_https = my_http.createServer(options);
echo.installHandlers(server_https, {
    prefix: '/echo'
});
server_https.listen(443, '0.0.0.0');

app.get('/type/:channel', function (req, res) {
    res.setHeader('Content-Type', 'application/json');
    res.send("Hello");
    res.end();
});

问题是我得到了port already in use error:

Error: listen EADDRINUSE

我让Nginx在443上监听,否则我的网站将无法在ssl上工作。

有什么想法吗?

在nginx配置中,您应该将端口列在"上游"中。在您的情况下,服务器下可能列出了相同的端口。当你这样做的时候,它显示了这个错误。请参阅下面的正确配置(如果您将"listen 80"更改为"listen 8000",您将看到该错误):

    upstream app_yourAppName {
        server 127.0.0.1:8000;
    }
    # the nginx server instance
    server {
        listen 80;
        ...
        ...
    }

最新更新