1

我已经设置了一个简单的 HTTPS 服务器来处理以下情况:

  1. https://localhost:5000/在我的目录中具有匹配文件的请求通过connect.static(__dirname). 这适用于我的 index.html 和 CSS 文件等所有内容,并且可以完全按照我的需要工作。

  2. 请求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');
4

1 回答 1

0

万一有人碰到这个老问题,你应该使用 http-proxy 的 changeOrigin 选项。

于 2017-11-17T04:37:00.260 回答