https.listen 忽略主机名
https.listen ignores hostname
我尝试将 https 服务器绑定到我的子域 (cdn.somedomain.com)。但是 https.listen(443, 'cdn.somedomain.com') 会忽略主机名。他试图绑定 ip,从而绑定所有地址。
var fs = require('fs');
var https = require('https');
var express = require('express');
var app = express();
var subdomain = require('express-subdomain');
var router = express.Router();
var options = {
key : fs.readFileSync('/path/to/privkey.pem'),
cert : fs.readFileSync('/path/to/cert.pem'),
hostname: 'cdn.somedomain.com'
};
router.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
next();
});
router.use(express.static('somefiles'));
app.use(subdomain('cdn', router));
https.createServer(options, app).listen(443, 'cdn.somedomain.com');
我已经尝试使用 'express-subdomain',您可以在我的代码中看到。
希望你能帮帮我。
尼尔斯
listen 函数获取您的主机名参数并将其解析为 ip 地址,因此 "ignores" 主机名。
来源:
node.js:: what does hostname do in `listen` function?
你不是要绑定所有地址吗?还是您要忽略您的主域?
使用路由器处理不同的域:
var v1Routes = express.Router();
var v2Routes = express.Router();
v1Routes.get('/', function(req, res) {
res.send('API - version 1');
});
v2Routes.get('/', function(req, res) {
res.send('API - version 2');
});
router.use(subdomain('*.v1', v1Routes));
router.use(subdomain('*.v2', v2Routes));
听起来像你想要的 virtual hosting,你的服务器只会将匹配特定主机名 (cdn.somedomain.com) 的请求传递给路由器。
您可以为此使用 vhost
模块:
var vhost = require('vhost');
...
app.use(vhost('cdn.somedomain.com', router));
我尝试将 https 服务器绑定到我的子域 (cdn.somedomain.com)。但是 https.listen(443, 'cdn.somedomain.com') 会忽略主机名。他试图绑定 ip,从而绑定所有地址。
var fs = require('fs');
var https = require('https');
var express = require('express');
var app = express();
var subdomain = require('express-subdomain');
var router = express.Router();
var options = {
key : fs.readFileSync('/path/to/privkey.pem'),
cert : fs.readFileSync('/path/to/cert.pem'),
hostname: 'cdn.somedomain.com'
};
router.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
next();
});
router.use(express.static('somefiles'));
app.use(subdomain('cdn', router));
https.createServer(options, app).listen(443, 'cdn.somedomain.com');
我已经尝试使用 'express-subdomain',您可以在我的代码中看到。
希望你能帮帮我。
尼尔斯
listen 函数获取您的主机名参数并将其解析为 ip 地址,因此 "ignores" 主机名。
来源: node.js:: what does hostname do in `listen` function?
你不是要绑定所有地址吗?还是您要忽略您的主域?
使用路由器处理不同的域:
var v1Routes = express.Router();
var v2Routes = express.Router();
v1Routes.get('/', function(req, res) {
res.send('API - version 1');
});
v2Routes.get('/', function(req, res) {
res.send('API - version 2');
});
router.use(subdomain('*.v1', v1Routes));
router.use(subdomain('*.v2', v2Routes));
听起来像你想要的 virtual hosting,你的服务器只会将匹配特定主机名 (cdn.somedomain.com) 的请求传递给路由器。
您可以为此使用 vhost
模块:
var vhost = require('vhost');
...
app.use(vhost('cdn.somedomain.com', router));