Nginx не работает в HTTPS

#amazon-web-services #nginx #https #tcp #nginx-config

#amazon-web-services #nginx #https #tcp #nginx-config

Вопрос:

Я установил Nginx на компьютере Amazon Linux и, используя конфигурационный файл:

 http {
        
        upstream allbackend {
            #round robin private IP 
            server 172.31.xx.xxx:8080;
            server 172.31.xx.xx:8080;
        }
        
        server {
              listen 80;
              listen 443 ssl http2;
    
              ssl_certificate /etc/letsencrypt/live/xxx.ddns.net/fullchain.pem;
              ssl_certificate_key /etc/letsencrypt/live/xxx.ddns.net/privkey.pem;
    
              ssl_protocols TLSv1.3;
    
              location / {
                  proxy_pass http://allbackend/;
              }
         }
    
    }
    
    events { } 
  

Однако сайт xxx.ddns.net работает только в HTTP, а не в HTTPS. Группы безопасности определены:

введите описание изображения здесь

cURL возвращает мне это:

 curl https://xxx.ddns.net/
curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to xxx.ddns.net:443
  

В чем проблема?

Ответ №1:

Вам нужен один серверный блок для порта 80 (HTTP) и один для порта 443 (HTTPS). Серверный блок для порта 80 просто перенаправляет на серверный блок для порта 443. Вся конфигурация выглядит примерно так:

 server {
      listen 80;
      server_name xxx.ddns.net www.xxx.ddns.net;
      return 301 https://xxx.ddns.net$request_uri;
}

server {
      listen 443 ssl http2;
      server_name xxx.ddns.net www.xxx.ddns.net;

      ssl on;
      ssl_certificate /etc/letsencrypt/live/xxx.ddns.net/fullchain.pem;
      ssl_certificate_key /etc/letsencrypt/live/xxx.ddns.net/privkey.pem;

      ssl_protocols TLSv1.3;

      location / {
          proxy_pass http://allbackend:port;
      }
 }
  

Надеюсь, это поможет решить вашу проблему 🙂