Nginx Proxy для AWS ELB не передает протокол HTTPS на серверные экземпляры

Это мой первый вопрос, поэтому, пожалуйста, не беспокойтесь!

Я пытаюсь настроить прокси-сервер Nginx для автоматической генерации сертификатов SSL с использованием OpenResty / Lua и LetsEncrypt в рамках мультитенантной платформы SAAS.

Прокси-сервер работает, сертификаты выдаются нормально. Конфигурация Nginx (через OpenResty) передает запросы моему AWS Elastic (Classic) Load Balancer.

Проблема в том, что экземпляры, стоящие за моим ELB, похоже, не получают протокол HTTPS, поэтому ссылки в навигации по моим веб-сайтам и т. Д. Все являются HTTP, а не HTTPS.

Например, загрузка http s : //www.domain.com работает, но при нажатии на ссылку в навигации отображается http : //www.domain.com/page.html

Вот мой OpenResty / Конфигурация nginx на прокси:

http {
  lua_shared_dict auto_ssl 1m;
  lua_shared_dict auto_ssl_settings 64k;
  resolver 8.8.8.8 ipv6=off;

  init_by_lua_block {
    auto_ssl = (require "resty.auto-ssl").new()
    auto_ssl:set("allow_domain", function(domain)
      return true
    end)
    auto_ssl:init()
  }

  init_worker_by_lua_block {
    auto_ssl:init_worker()
  }

  server {
    listen 443 ssl;
    location / {
      proxy_pass http://AWS-ELB-URL-HERE;
      proxy_set_header Host $http_host;
      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;
    }
    ssl_certificate_by_lua_block {
      auto_ssl:ssl_certificate()
    }
    ssl_certificate /etc/ssl/resty-auto-ssl-fallback.crt;
    ssl_certificate_key /etc/ssl/resty-auto-ssl-fallback.key;
  }

  server {
    listen 80;
    location /.well-known/acme-challenge/ {
      content_by_lua_block {
        auto_ssl:challenge_server()
      }
    }
  }

  server {
    listen 127.0.0.1:8999;
    client_body_buffer_size 128k;
    client_max_body_size 128k;

    location / {
      content_by_lua_block {
        auto_ssl:hook_server()
      }
    }
  }
}

Пытаясь определить, связана ли проблема с моим приложением Rails, я изменил конфигурацию Nginx, указав прямо на IP-адрес экземпляра, а не на ELB. При этом все ссылки https (!), Что я и хочу!

Итак, на данный момент, я считаю, что проблема либо а) моя конфигурация Nginx не передает протокол должным образом или б) мой ELB не передает протокол в серверный экземпляр.

I ' m как бы склонен думать, что виновником является ELB, поскольку все работает так, как ожидалось, когда прокси указывает непосредственно на IP-адрес экземпляра.

Итак, я начал изучать конфигурацию ELB и слушателей, но пока не смог найти конфигурацию, которая работает. Вот что у меня сейчас:

enter image description here

Я также пытался изменить его на:

Протокол балансировки нагрузки: HTTPS (безопасный HTTP), Порт балансировщика нагрузки: 443, Протокол экземпляра: HTTP, Порт экземпляра: 80

Но это тоже не сработало, и ссылки по-прежнему являются HTTP.

Теперь я просто догадываюсь, что мне делать с Слушателями и Портами, пробуя любую конфигурацию, чтобы увидеть, работает ли она или не. Пока ничего.

Кто-нибудь знает, в чем может быть проблема и как ее исправить? TIA!

1
задан 18 March 2019 в 14:00
1 ответ

ладно, разобрался! Я только что добавил дополнительную директиву в блок SSL:

proxy_set_header X-Forwarded-Ssl on;

После перезапуска nginx все запросы теперь передаются как https на мой ELB и серверы приложений позади него!

Кроме того, для моих слушателей ELB я удалил SSL (Secure TCP) слушатель и добавил:

Протокол LB: HTTPS (безопасный HTTP), Порт LB: 443, Протокол экземпляра: HTTP, Порт экземпляра: 80

0
ответ дан 4 December 2019 в 03:53

Теги

Похожие вопросы