Nginx confg问题-无法解决';t从NodeJS测试程序连接到S3兼容存储

Nginx confg问题-无法解决';t从NodeJS测试程序连接到S3兼容存储,nginx,amazon-s3,header,Nginx,Amazon S3,Header,这是我关于StackOverflow的第一个问题。 我需要在DMZ中提供LB和代理层,以便客户端访问后端S3兼容的存储以读取存储桶。为此,我使用了多个Nginx实例:一个实例用于LB(节点1),两个实例(节点2,3)作为反向代理。LB(节点1)侦听https 443,并具有CA签名的证书,在internet上可见。节点2,3正在侦听http 80,并将fwd请求发送到后端S3兼容存储,使用自签名证书侦听https 当我使用DMZ层中的test NodeJS程序直接连接到S3兼容的存储时,我可以使

这是我关于StackOverflow的第一个问题。 我需要在DMZ中提供LB和代理层,以便客户端访问后端S3兼容的存储以读取存储桶。为此,我使用了多个Nginx实例:一个实例用于LB(节点1),两个实例(节点2,3)作为反向代理。LB(节点1)侦听https 443,并具有CA签名的证书,在internet上可见。节点2,3正在侦听http 80,并将fwd请求发送到后端S3兼容存储,使用自签名证书侦听https

当我使用DMZ层中的test NodeJS程序直接连接到S3兼容的存储时,我可以使用AWS客户端读取和列出存储桶,并使用accessKeyId和secretAccessKey

但是,当我从internet使用相同的test NodeJS程序,使用相同的accessKeyId和secretAccessKey,并尝试连接到节点1(最终到达后端S3兼容存储)时,我得到以下错误:

{"message":"The request signature we calculated does not match the signature you provided. 
Check your AWS Secret Access Key and signing method. 
For more information, see REST Authentication and SOAP Authentication for details.",
"code":"SignatureDoesNotMatch",
"region":null,
"time":"2018-12-18T12:34:28.313Z",
"requestId":"2899219037",
"statusCode":403,"retryable":false,
"retryDelay":14.04655267301651}
我尝试了多种方法来理解和解决这个问题。看起来我的Nginx配置没有正确地传递http头。但是我没有显式地配置任何东西来隐藏http头,我的理解是,除非我们显式地阻止它们,否则所有头都会通过

除了访问S3兼容的后端存储之外,这些调用都是通过Nginx进行的。我甚至测试过访问另一台主机,而不是S3兼容的存储(带有自签名证书),它工作得很好

请提出任何解决方案。让我知道我可能需要添加到此问题的任何信息

srinivas已解决

在我的例子中,解决问题的方法是将
Host
设置为标头

location /something {
    ...
    proxy_set_header Host $http_host;
    ...
}
我的理解是,
主机
用作签名生成/验证的一部分。默认情况下,它由Nginx剥离,设置此选项可显式解决此问题

已解决

在我的例子中,解决问题的方法是将
Host
设置为标头

location /something {
    ...
    proxy_set_header Host $http_host;
    ...
}
我的理解是,
主机
用作签名生成/验证的一部分。默认情况下,它由Nginx剥离,设置此选项可显式解决此问题