https с nginx и docker не работают

#django #docker #nginx #docker-compose #certbot

Вопрос:

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

Я пытаюсь добавить 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 amp; 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/;
    }
    
}
 

Here is my nginx.conf configuration that does not work (http and 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 .

Комментарии:

1. Пожалуйста, кто-нибудь должен мне помочь.. Я до сих пор не нашел решения этой проблемы

Ответ №1:

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

Мое приложение работало на сервере ec2 на aws.

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

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