Https с nginx и docker compose не работает

Пожалуйста, мне нужна помощь. Ваш вклад будет высоко оценен

Я пытаюсь добавить ssl к конфигурации nginx и docker compose. В настоящее время все отлично работает с http, но не работает с https.

Вот мой файл docker-compose.yml

version: '3.8'

services:
  web_gunicorn:
    image: ACCT_ID.dkr.ecr.us-east-2.amazonaws.com/web_gunicorn:latest
    volumes:
      - static:/static
      - media:/media
    # env_file:
    #   - .env  
    pull_policy: always
    restart: always
    ports:
      - "8000:8000"
    environment:
      - PYTHONUNBUFFERED=1
      - PYTHONDONTWRITEBYTECODE=1
  nginx:
    image: ACCT_ID.dkr.ecr.us-east-2.amazonaws.com/nginx:latest
    pull_policy: always
    restart: always
    volumes:
      - static:/static
      - media:/media
      - ./certbot/conf:/etc/letsencrypt
      - ./certbot/www:/var/www/certbot 
    ports:
      - "80:80"
      - "443:443"
    depends_on:
      - web_gunicorn
  certbot:
    image: certbot/certbot
    restart: unless-stopped
    volumes:
      - ./certbot/conf:/etc/letsencrypt
      - ./certbot/www:/var/www/certbot 
    depends_on:
      - nginx  
    entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"    
        
volumes:
  static:
  media:


Вот моя конфигурация nginx.conf, которая работает (http)

upstream web {
    server web_gunicorn:8000;
}

server {
    listen 80;
    server_name domain.com;

    
    location / {
        resolver 127.0.0.11;
        proxy_pass http://web;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;    
        }

    location /static/ {
        alias /static/;
    }

    location /media/ {
        alias /media/;
    }
    
}

Вот моя конфигурация nginx.conf, которая не работает (http и https)

upstream web {
    server web_gunicorn:8000;
}

    server {

        location / {
            resolver 127.0.0.11;
            proxy_pass http://web;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $host;
            proxy_redirect off;    
        }

        location /static/ {
            alias /static/;
        }
        location /media/ {
            alias /media/;
        }

    listen 443 ssl; 
    ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;     
    ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;     
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; 
}

  server {
    if ($host = domain.com) {
        return 301 https://$host$request_uri;
    }   
        
        listen 80;
        server_name domain.com;
    return 404; 
}

Ниже приведены логи nginx, когда я делаю docker-compose logs nginx

nginx_1                  | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
nginx_1                  | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
nginx_1                  | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
nginx_1                  | 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
nginx_1                  | 10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
nginx_1                  | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
nginx_1                  | /docker-entrypoint.sh: Configuration complete; ready for start up

Еще одна вещь. На моем сервере я могу видеть все ssl файлы, сгенерированные certbot, и хранящиеся в папке под названием cerbot.

Наконец-то нашел проблему. Итак, вся моя конфигурация была в порядке. Проблема была в том, что порт 443 не был открыт на моем сервере. Я открыл его только в исходящем правиле, я не знал, что должен открыть его и во входящем правиле.

Мое приложение было запущено на сервере ec2, на aws.

Я использовал этот инструмент https://www.yougetsignal.com/tools/open-ports/, чтобы проверить, открыт или закрыт порт.

Закрытый порт также вызвал таймаут моих запросов к серверу.

Вернуться на верх