我已经设置了一个简单的 HTTPS 服务器来处理以下情况:
https://localhost:5000/
在我的目录中具有匹配文件的请求通过connect.static(__dirname)
. 这适用于我的 index.html 和 CSS 文件等所有内容,并且可以完全按照我的需要工作。请求
https://localhost:5000/api
应重定向到https://subdomain.mydomain.com:443/api
.
代理正在通过 HTTPS 正确传输所有内容,并且 SSL 握手部分似乎完全按照我的预期工作。问题是我的 API 使用子域来确定要连接到什么数据库以及要返回什么数据。所以,我的 API 看到了请求
https://localhost:5000/api/something
代替
https://subdomain.mydomain.com/api/something
并抛出一个错误,告诉我必须提供子域。
在进行代理时,如何告诉节点代理转发(或使用)域/子域?
这是我的代码:
var fs = require('fs');
var connect = require('connect'),
https = require('https'),
httpProxy = require('http-proxy'),
options = {
key: fs.readFileSync('key.pem'),
cert: fs.readFileSync('cert.pem')
},
endpoint = {
host: 'subdomain.mydomain.com',
port: 443,
prefix: '/api',
target: { https: true }
};
var proxy = new httpProxy.RoutingProxy();
var app = connect()
.use(connect.logger('dev'))
.use(function(req, res, next) {
if (req.url.indexOf(endpoint.prefix) === 0) {
proxy.proxyRequest(req, res, endpoint);
} else {
next();
}
})
.use(connect.static(__dirname));
https.createServer(options, app).listen(5000);
console.log('Listening on port 5000');