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

После настройки балансировщика эластичной нагрузки мой https больше не работает. Ошибка Nginx

У меня есть обычный экземпляр, который отлично работает, когда не находится за балансировщиком нагрузки. Я установил ELB с 80 переадресацией на 80 и 443 пересылкой на 443 и липкими сессиями. После этого я получаю эту ошибку при переходе на любую страницу https.

The plain HTTP request was sent to HTTPS port

Я обрабатываю процесс принудительного использования https на определенных страницах в моей конфигурации nginx. Что мне нужно сделать, чтобы это заработало? Я добавляю базовую версию своей конфигурации nginx ниже.

http {

  include               mime.types;
  default_type          application/octet-stream;

  # Directories
  client_body_temp_path tmp/client_body/  2 2;
  fastcgi_temp_path     tmp/fastcgi/;
  proxy_temp_path       tmp/proxy/;
  uwsgi_temp_path       tmp/uwsgi/;

  server {
    listen              443;
    ssl                 on;
    ssl_certificate     ssl.crt;
    ssl_certificate_key ssl.key;

    server_name www.shirtsby.me;
    if ($host ~* ^www\.(.*)) {
        set $host_without_www $1;
        rewrite ^/(.*) $scheme://$host_without_www/$1 permanent;
    }

    location ~ ^/(images|img|thumbs|js|css)/  {
          root /app/public;
    }
    if ($uri ~ ^/(images|img|thumbs|js|css)/) {
        set $ssltoggle 1;
    }
    if ($uri ~ "/nonsecure") {
        set $ssltoggle 1;
    }
    if ($ssltoggle != 1) {
        rewrite ^(.*)$ http://$server_name$1 permanent;
    }

    location / {
      uwsgi_pass  unix:/site/sock/uwsgi.sock;
      include     uwsgi_params;
    }

  }

  server {
    listen      80;
    server_name www.shirtsby.me;
    if ($host ~* ^www\.(.*)) {
        set $host_without_www $1;
        rewrite ^/(.*) $scheme://$host_without_www/$1 permanent;
    }

    if ($uri ~ "/secure") {
        set $ssltoggle 1;
    }
    if ($ssltoggle = 1) {
        rewrite ^(.*)$ https://$server_name$1 permanent;
    }

    location ~ ^/(images|img|thumbs|js|css)/  {
          root /app/public;
    }

    location / {
      uwsgi_pass  unix:/home/ubuntu/site/sock/uwsgi.sock;
      include     uwsgi_params;
    }
  }
}

В итоге получил ответ от vandemar в IRC-канале nginx. Кажется довольно простым, но я не мог понять это. ELB обрабатывал SSL, я уже предоставил ему всю информацию о сертификате. Проблема заключалась в повторной попытке решить ее в отдельных экземплярах или в файле конфигурации. Решение состоит в том, чтобы просто удалить весь материал SSL из файла конфигурации. Итак, удаление этих трех строк исправило все:

ssl                 on;
ssl_certificate     ssl.crt;
ssl_certificate_key ssl.key;

Я была такая же проблема. Но потом я заметил, что мой elb-listener настроен неправильно. Я настроил протокол балансировки нагрузки: https, порт балансировщика нагрузки: 443, порт экземпляра: 443, но забыл изменить протокол экземпляра с http на https.