ELB 后面的 Nginx,根据转发标头(主机)进行转发

ELB 后面的 Nginx,根据转发标头(主机)进行转发

我们有一个 Amazon Web Services (AWS) Classic Elastic Load Balancer (ELB),它位于 Nginx 前面。Nginx 位于 Jenkins 和 EC2 容器服务存储库 (ECR) 前面。

设置相当复杂,很大程度上是由于 AWS 和项目限制(我们正尝试在欧洲将 Jenkins 实例托管为容器 => AWS ECS 服务 => 由于 ALB 或 NLB 在转发 HTTP 方面的限制,因此无法使用它们TCP => 必须使用 Classic ELB;Nginx 在那里是因为 ECS 存储库不能有自定义域名)。

Classic ELB 无法根据域名过滤流量,所以我想在 Nginx 配置中执行此操作。

我可以根据从 ELB 收到的转发标头在 Nginx 中执行此操作吗?附带问题,这些标头是否有实际文档?我找到了一些零碎信息(例如 $http_x_forwarded_proto),但在官方文档中没有找到任何信息。

当前配置看起来有点像这样(这是 Nginx 执行 HTTP -> HTTPS 并为 ECR URL 转发 HTTPS 时的产物;当时前面有一个 ALB 执行域过滤):

server {
    listen 80;
    server_name  localhost;

    # Redirect HTTP to HTTPS.
    if ($http_x_forwarded_proto = "http") {
            return 301 https://$host$request_uri;
    }

    # Forward HTTPS requests to the Elastic Container Repository (ECR).
    location / {
            proxy_pass              "https://ecr-url";
            proxy_set_header        Host "ecr-url";
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header        X-Forwarded-Proto $scheme;
            proxy_read_timeout  90;
    }

}

我知道如果是邪恶的但是我找不到更简单的替代方案,并且我试图保持在 Nginx 的“安全”限制内。

相关内容