我在nodejs
中有一个简单的SockJS
和Express
服务器。现在我想为这些服务器添加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;
...
...
}