javascript - 使用 gurnt-connect-proxy 代理到 cloudfront 得到 403 错误
问题描述
我曾经将grunt-connect-proxy
某些页面反向代理到我的 CloudFront 网站,但它无法正常工作。
环境:
- 咕哝:
^0.4.5
- grunt-contrib-connect:
^0.9.0
, - 咕噜连接代理:
^0.2.0
,
我试过的
- 使用
http-proxy
(成功):
httpProxy.createProxyServer({target: {
protocol: 'http:',
host: 'myhostname.com',
port: 80,
},
headers: {
host: 'myhostname.com'
}}).listen(8080)
- 使用
curl
(成功):
curl -v http://myhostname.com/signin
- 使用
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'
}
...
}]
我ERR_CONTENT_DECODING_FAILED
从铬得到错误。那么,正确的配置是什么?
解决方案
我已经通过客户中间件解决了这个问题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();
}
})
推荐阅读
- python - 使用列表推导替换字符串列表中的特定字符
- django - 如何将 django 管理命令的异常记录到文件而无需破解 manage,py?
- sql - Oracle 使用 LENGTH 和 INSTR 返回错误值
- reporting-services - 如何在SSRS中显示上周星期日和上周星期六?
- r - dplyr 包的 inner_join 输出不正确
- python - 这是一种什么样的数据结构?Python
- merge - Git - 从 master 创建分支后,我必须与 master 同步以获取其源。为什么?
- arrays - 如何创建给定长度和相同数字的数组?
- c# - 更新 Visual Studio 后未构建 Xamarin.forms 应用。找不到文件 AppName.dll
- python - 如何修复此 ConnectionRefusedError?