【问题标题】:nginx s3 gateway handshake failurenginx s3网关握手失败
【发布时间】:2021-05-12 02:51:35
【问题描述】:

我是 nginx 新手,正在尝试使用 this repo 在 s3 存储桶前设置 nginx 代理。

根据 repo,我的设置文件(名称 --> my.settings)看起来像 -

S3_BUCKET_NAME=my-s3-bucket
S3_SERVER=s3.amazonaws.com
S3_REGION=us-east-1
S3_ACCESS_KEY_ID=myaccesskey
S3_SECRET_KEY=mysecretkey
S3_SERVER_PORT=443
S3_SERVER_PROTO=https
S3_STYLE=path
S3_DEBUG=true
AWS_SIGS_VERSION=4

我按照 repo 中的建议使用 -

构建了图像

docker build -f Dockerfile.oss -t nginx-oss-s3-gateway .

当我使用 - docker run -p8080:80 --env-file ./my.settings nginx-oss-s3-gateway 运行图像时

图像按预期正常启动。我尝试发送请求以从存储桶中检索对象 - curl -v http://localhost:8080/index.html 并返回 HTTP 404。我查看正在运行的 nginx 容器并看到了这个 -

2021/05/12 02:39:17 [error] 58#58: *1 peer closed connection in SSL handshake while SSL 
handshaking to upstream, client: 172.17.0.1, server: , request: "GET /index.html HTTP/1.1", 
upstream: "https://52.217.165.200:443/mys3bucket/index.html", host: "localhost:8080"
172.17.0.1 - - [12/May/2021:02:39:17 +0000] "GET /index.html HTTP/1.1" 404 146 "-" "curl/7.64.1" "-"
2021/05/12 02:39:17 [info] 58#58: *1 client 172.17.0.1 closed keepalive connection

我尝试将ssl_verify_client off; 添加到 nginx.conf 并重新加载配置,但这没有帮助。

我感觉这是因为 nginx 无法验证 aws s3 证书?在这种情况下,我应该将 s3 证书导入信任库并指向 nginx 配置吗?我试图通过下载特定证书来避免证书固定。

关于如何解决这个问题的任何建议?

【问题讨论】:

    标签: docker nginx ssl amazon-s3


    【解决方案1】:

    我已按照您提到的存储库中的完全相同的步骤进行操作。而且我可以访问我的 S3 存储桶文件。我从您的配置中看到的唯一区别是属性

    S3_STYLE=路径

    我用了

    S3_STYLE=虚拟

    而且我也相信这与ssl_verify_client 无关。您将收到 404 HTTP 响应,这意味着您可以连接到 S3 服务器 - 证书验证没有问题。您尝试访问的 URL 错误或配置错误。

    【讨论】:

    • 我尝试将S3_STYLE 单独设置为路径和虚拟,登录到容器并使用多种 S3 凭据组合。它不起作用。你的存储桶是公开的吗?
    • @satya 不,我的存储桶是私有的。顺便说一句,这些属性是环境变量。因此,登录到容器并更改它们可能不起作用,因为服务已经启动并运行。您应该尝试更改 my.settings 文件中的变量并重新运行容器以使其工作,我猜。
    猜你喜欢
    • 2016-12-20
    • 1970-01-01
    • 1970-01-01
    • 2016-11-17
    • 2018-07-28
    • 2017-06-19
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多