我已经设置了一个简单的HTTPS服务器来处理以下情况:
https://localhost:5000/
通过connect.static(__dirname)
向我的目录中包含匹配文件的https://localhost:5000/api
请求提供服务。这适用于我的index.html和我的CSS文件,并且完全按照我的需要工作。
https://subdomain.mydomain.com:443/api
的请求应重定向到https://localhost:5000/api/something
。
代理正在通过HTTPS正确传输所有内容,SSL握手部分似乎正如我所期望的那样工作。问题是我的API使用子域来确定要连接的数据库以及要返回的数据。所以,我的API会看到请求
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');
并且正在抛出错误,告诉我必须提供子域。
如何在执行代理时告诉节点代理转发(或使用)域/子域?
这是我的代码:
{{1}}
答案 0 :(得分:0)
万一有人碰到这个老问题,你应该使用http-proxy的changeOrigin选项。