我们有一个 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 的“安全”限制内。