Назад | Перейти на главную страницу

Nginx за ELB, вперед на основе заголовков пересылки (хост)

У нас есть классический эластичный балансировщик нагрузки (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.