使用gurnt-connect-proxy代理到Cloudfront获取403错误

时间:2019-04-18 04:34:39

标签: javascript proxy cors gruntjs amazon-cloudfront

我使用grunt-connect-proxy将某些页面反向代理到我的CloudFront网站,但无法正常工作。

ENV:

  • 咕gr声:^0.4.5
  • grunt-contrib-connect:^0.9.0
  • grunt-connect-proxy:^0.2.0

我尝试过的事情

  1. 使用http-proxy成功):
httpProxy.createProxyServer({target: {
  protocol: 'http:',
  host: 'myhostname.com',
  port: 80,
},
headers: {
  host: 'myhostname.com'
}}).listen(8080)
  1. 使用curl成功):
curl -v http://myhostname.com/signin
  1. 使用Nginx成功):
location ~* ^/(signin|styles|scripts) {
  proxy_pass http://myhostname.com;
}

使用grunt-connect-proxy失败

connect: {
  server: {
    options: {
      open: true,
        base: ['app'],
          middleware: function(connect, options, middlewares) {
            if (!Array.isArray(options.base)) {
              options.base = [options.base];
            }
            middlewares.push(modRewrite([
              '^\\/customer-portal\\/((?!\\.).)*$ /index.html'
            ]));
            middlewares.push(connect.static(options.base[0]));
            middlewares.push(require('grunt-connect-proxy/lib/utils').proxyRequest)
            return middlewares;
          }
    },
    proxies: [{
      context: ['/signin', '/scripts', '/styles'],
      host: 'myhostname.com',
      port: '80',
      https: false,
    }]
  },
}

它从CloudFront获取403代码(我不确定CloudFront中的403是404还是否)。 如果我将headers添加到proxies

proxies: [{
 ...
  headers: {
    'host': 'myhostname.com'
  }
 ...
}]

我从chrome中收到ERR_CONTENT_DECODING_FAILED错误。 那么,什么是正确的配置?

1 个答案:

答案 0 :(得分:0)

我已经通过http-proxy用客户中间件解决了这个问题,放弃了使用grunt-connect-proxy,这样的代码:

middlewares.push(function(req, res, next) {
  if(someRegex.test(req.url) {
    proxy.web(req, res, {target: 'myhostname.com'})
  } else {
    return next();
  }
})