Проблемы с NGINX / SSL сертификатом при запуске docker-compose с NGINX, Django & Acme companion

У меня есть проблема, которая беспокоит меня уже несколько дней, и я не уверен, является ли это чистой проблемой NGINX или имеет какое-то отношение к SSL сертификатам, поэтому я объясню проблему, с которой я столкнулся, в надежде, что кто-то сможет помочь мне разобраться, откуда исходит проблема.

Я запускаю следующий файл docker-compose, состоящий из приложения Django, Nginx-прокси и контейнера, использующего let's-encrypt для генерации SSL-сертификата, я черпал вдохновение для этого из документации по образу Docker для контейнера let's-encrypt и учебника:

https://github.com/nginx-proxy/acme-companion/blob/main/docs/Docker-Compose.md

https://testdriven.io/blog/django-lets-encrypt/

docker-compose.yml

 version: '2'

services:

  web:
    container_name: web
    restart: always
    labels:
      - "com.centurylinklabs.watchtower.enable=true"
    image: index.docker.io/username/myreponame:latest
    command: gunicorn myreponame.wsgi:application --bind 0.0.0.0:8000 
    volumes:
      - static_volume:/home/dockeruser/web/staticfiles
      - media_volume:/home/dockeruser/web/mediafiles
    expose:
      - 8000
    env_file:
      - ./.env.prod
    logging:
      driver: "json-file"
      options:
          max-size: "100m"
    network_mode: bridge

  nginx-proxy:
    image: nginxproxy/nginx-proxy
    container_name: nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - conf:/etc/nginx/conf.d
      - vhost:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
      - certs:/etc/nginx/certs:ro
      - /var/run/docker.sock:/tmp/docker.sock:ro
    network_mode: bridge

  acme-companion:
    image: nginxproxy/acme-companion
    container_name: nginx-proxy-acme
    volumes_from:
      - nginx-proxy
    volumes:
      - certs:/etc/nginx/certs:rw
      - acme:/etc/acme.sh
      - /var/run/docker.sock:/var/run/docker.sock:ro
    network_mode: bridge


volumes:
  conf:
  vhost:
  html:
  certs:
  acme:
  static_volume:
  media_volume:

Если я запускаю контейнеры, я могу получить доступ к веб-сайту через браузер, и он, кажется, работает нормально, и я получаю "значок замка", говорящий, что у него есть действительный SSL-сертификат, однако:

  • При попытке выполнить CURL на моем сайте я сталкиваюсь с проблемой, говорящей о том, что есть проблемы с SSL сертификатом:

    curl https://www.example.com curl: (60) Проблема с SSL сертификатом: самоподписанный сертификат Более подробная информация здесь: https://curl.haxx.se/docs/sslcerts.html

    .

    curl не смог проверить легитимность сервера и поэтому не смог установить безопасное соединение с ним. Чтобы узнать больше об этой ситуации и как ее исправить, посетите веб-страницу, указанную выше.

  • Мой контейнер NGINX, похоже, столкнулся с некоторой проблемой, если я запустил docker logs nginx-proxy:

docker logs nginx-proxy

Одна строка, которую я нахожу интригующей, однако, следующая:

nginx.1     | 2022/02/08 20:41:30 [warn] 41#41: no resolver defined to resolve r3.o.lencr.org while requesting certificate status, responder: r3.o.lencr.org, certificate: "/etc/nginx/certs/mydomainname.se.crt"

Но если я проверю внутри моего контейнера nginx-proxy в файле conf.d NGINX, я найду следующую строку, которая, похоже, является резольвером, который должен разрешить сертификат?

resolver 109.74.192.20 109.74.193.20 151.236.220.5;

Если я возьму внутренний IP, к которому у NGINX, похоже, проблемы с подключением (мое веб-приложение работает на порту 8000), и выполню CURL на нем из контейнера nginx-proxy, я получу:

curl http://172.17.0.5:8000/
curl: (7) Failed to connect to 172.17.0.5 port 8000: Connection refused

Наконец, вот журналы из nginx-proxy-acme, где я не вижу никаких проблем:

docker logs nginx-proxy-acme

Любой, кто может помочь мне разобраться в этом вопросе, будет очень признателен.

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