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

Nginx, Docker-Compose и Let's encrypt в соединении отклонены, если я не отключу ssl

У меня есть проект docker-compose, для которого требуется ssl, и я хочу использовать Let's encrypt certbot, который я хочу включить в файл docker-compose для автоматического обновления. Я следил за этим учебник из среды. Проблема в том, что он, кажется, вообще не работает, когда у меня включен ssl в файле конфигурации Nginx, и дает мне только Ошибка авторизации. и:

   Type:   connection
   Detail: Fetching
   http://example.com/.well-known/acme-challenge/1234:
   Connection refused

Но когда я удаляю параметр ssl в файле конфигурации nginx, он работает, и я получаю сертификаты.

Я сделал следующий файл для создания докеров:

version: '3'
services:
  nginx:
    restart: always
    build:
      context: .
      dockerfile: Dockerfile
    container_name: nginx
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./data/certbot/conf:/etc/letsencrypt
      - ./data/certbot/www:/var/www/certbot
      - ./nginx.conf:/etc/nginx/nginx.conf
    ports:
      - 80:80
      - 443:443
    links:
      - application

  certbot:
    image: certbot/certbot
    volumes:
      - ./data/certbot/conf:/etc/letsencrypt
      - ./data/certbot/www:/var/www/certbot
    entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"


  application:
    restart: always
    build:
      context: ./accesslink
      dockerfile: Dockerfile
    container_name: application

Со следующим конфигурационным файлом nginx:

http {
    server {
        listen 80;
        listen [::]:80;
        server_name example.com;

        location /.well-known/acme-challenge/ {
            allow all;
            default_type text/plain;
            root /var/www/certbot;
        }
    }

    server {
        listen 443 ssl;
        listen [::]:443 ssl;
        server_name example.com;
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

        root   /usr/share/nginx/html;
        index  index.html index.htm;
        include /etc/nginx/mime.types;
        include /etc/letsencrypt/options-ssl-nginx.conf;

        location / {
            try_files $uri $uri/ /index.html;
        }

        location /api {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_set_header Host $host;
            rewrite /api/(.*) /$1  break;
            proxy_pass http://application:3000;
        }
    }
}

Мой вопрос в основном в том, что я делаю не так и как я могу решить эту проблему? Другой вариант - сначала сгенерировать сертификаты, а затем использовать их, но будет ли сертификация продлена или мне нужно будет делать это вручную?