Использовать прокси-сервер gurnt-connect-proxy, чтобы получить ошибку 403 - PullRequest
0 голосов
/ 18 апреля 2019

Я использую grunt-connect-proxy, чтобы перенаправить прокси-страницу на мой сайт CloudFront, но она не может работать.

ENV:

  • хрюканье: ^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,
    }]
  },
}

Он получает код 403 от CloudFront (я не уверен, что 403 в CloudFront равен 404 или нет). если я добавлю headers к proxies

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

Я получаю ERR_CONTENT_DECODING_FAILED ошибку от Chrome. Итак, какова правильная конфигурация ??

1 Ответ

0 голосов
/ 19 апреля 2019

Я решил эту проблему с клиентским промежуточным ПО через 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();
  }
})
...