在节点中进行代理时包含子域

时间:2013-07-03 16:37:49

标签: node.js proxy subdomain

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

  1. https://localhost:5000/通过connect.static(__dirname)向我的目录中包含匹配文件的https://localhost:5000/api请求提供服务。这适用于我的index.html和我的CSS文件,并且完全按照我的需要工作。

  2. https://subdomain.mydomain.com:443/api的请求应重定向到https://localhost:5000/api/something

  3. 代理正在通过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}}

1 个答案:

答案 0 :(得分:0)

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