У нас есть классический эластичный балансировщик нагрузки (ELB) Amazon Web Services (AWS), который находится перед Nginx. Nginx находится перед Jenkins и EC2 Container Service Repository (ECR).
Настройка довольно сложна, и во многом это связано с ограничениями AWS и проекта (мы пытаемся разместить экземпляр Jenkins в качестве контейнера в Европе => AWS ECS service => не можем использовать ALB или NLB из-за их ограничений относительно пересылки HTTP и TCP => необходимо использовать классический ELB; Nginx присутствует, потому что в репозитории ECS не может быть собственного доменного имени).
Классический ELB не может фильтровать трафик по имени домена, поэтому я хотел бы сделать это в конфигурации Nginx.
Могу ли я сделать это в Nginx на основе заголовков пересылки, полученных от ELB? Боковой вопрос, есть ли какая-то актуальная документация для этих заголовков? Я нашел мелкие кусочки (например, $ http_x_forwarded_proto), но ничего в официальной документации.
Текущая конфигурация выглядит примерно так (это артефакт, когда Nginx просто выполнял HTTP -> HTTPS и перенаправлял HTTPS для URL ECR; в то время впереди был 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 if.