从单节点进程提供两个https主机名&港口城市
Serve two https hostnames from single node process & port
有没有一种方法可以单独从节点为同一端口上的两个https站点提供服务(即没有类似nginx的东西)?
我使用的是https模块,它的SSL选项(例如key
/cert
/ca
)被传递到createServer
中。我尝试创建两个https服务器,每个服务器都侦听不同的主机名,并且每个服务器都具有特定于该主机名的SSL选项:
require('https').createServer(sslOptsForFoo, expressApp).listen(443, 'foo.com');
require('https').createServer(sslOptsForBar, expressApp).listen(443, 'bar.com');
但这引发了一个错误:
错误:侦听EADDRINUSE
另一个想法是创建一个服务器而不是两个服务器,并根据请求的主机名使用不同的SSL选项,但我不确定这是否可行。
您只能使用SNI执行此操作,因此您可能需要首先检查各种浏览器是否支持SNI。
以下是在节点中进行SNI的一种方法:
var https = require('https'),
fs = require('fs');
// default for non-matching requests
var serverOptions = {
key: fs.readFileSync('default.pem'),
cert: fs.readFileSync('default.crt')
};
var SNIContexts = {
'foo.com': {
key: fs.readFileSync('foo.com.pem'),
cert: fs.readFileSync('foo.com.crt')
},
'bar.com': {
key: fs.readFileSync('bar.com.pem'),
cert: fs.readFileSync('bar.com.crt')
}
};
var server = https.createServer(serverOptions, function(req, res) {
res.end('Hello world via ' + req.socket.cleartext.servername);
});
server.addContext('foo.com', SNIContexts['foo.com']);
server.addContext('bar.com', SNIContexts['bar.com']);
server.listen(443, function() {
console.log('Listening on 443');
});
相关文章:
- chrome扩展更改主机/域警告
- 关于引入外部javascript文件的问题&css通过https
- jquery ajax https调用给出ERR_INSECURE_RESPONSE
- 如何通过安全的https连接在javascript中使用基于soap xml的Web服务
- 本地主机Typekit JS
- $https请求的安全性
- Meteor应用程序无法运行-对象#<编译器>没有方法'主机'
- https.request ignoring rejectUnauthorized
- 如何使用Wordpress'RESTApi访问本地主机上的数据
- web配置http到https重定向异常
- HTML:从http到https发布表单
- Node.js https获取请求ECONNRESET
- CasperJS(phantom 1.9.7),从昨天起就无法连接https
- 用于本地主机上进程间通信的Javascript中的UDP
- JQuery手机.网站上只有一个https页面
- Https XMLHttpRequest POST在本地主机上失败
- 将https与在同一主机上运行的解耦的前端和后端MEAN应用程序结合使用
- 从单节点进程提供两个https主机名&港口城市
- 如何使用https在本地主机上安全地将密码从客户端发送到服务器
- 从HTTPS页面发送数据到本地主机服务器