Проблемы с 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
Любой, кто может помочь мне разобраться в этом вопросе, будет очень признателен.