Несанкционированная ошибка при попытке добавить LetsEncrypt в домен, используя Nginx с docker для загрузки Spring - PullRequest
1 голос
/ 30 января 2020

Я пытаюсь добавить HTTPS в свой домен, используя LetsEcnrypt. На данный момент у меня настроен сервер, у меня Spring Boot работает на Tomcat в docker контейнере на Port 8088, и у меня есть Nginx сервер перед контейнером Tomcat, которому разрешен доступ к Port 80 и Port 443. Вот мои файлы конфигурации

nginx .conf

http{
server {
        listen 80;
        listen [::]:80;


        location / {
             proxy_pass        http://blab:8088;
             proxy_set_header  X-Real-IP $remote_addr;
             proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
             proxy_set_header  Host $http_host;
        }
        location /.well-known/acme-challenge/ {
            root /var/www/certbot;
        }
}
server {
    listen              443 ssl;
    server_name         blab.com;
    ssl_certificate     /etc/letsencrypt/live/blab.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/blab.com/privkey.pem;

    location / {
             proxy_pass        http://blab:8088;
             proxy_set_header  X-Real-IP $remote_addr;
             proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
             proxy_set_header  Host $http_host;
    }
}
}
events {  }

Dockerfile для создания nginx контейнера

Dockerfile

# latest nginx
FROM nginx
# copy custom configuration file
COPY nginx.conf /etc/nginx/nginx.conf
# expose server port
EXPOSE 80
# start server
CMD ["nginx", "-g", "daemon off;"]

Я создаю docker изображение для nginx, как это docker image build -t custom-nginx:latest .

Тогда у меня есть docker-compose.yml, как это

version: '3.7'

services:

  nginx_server:
    image: custom-nginx
    ports:
      - '80:80'
      - '443:443'
    volumes:
      - ./data/nginx:/etc/nginx/conf.d
      - ./data/certbot/conf:/etc/letsencrypt
      - ./data/certbot/www:/var/www/certbot
    depends_on:
      - "blab"

  blab:
    image: joker/blab
    ports:
      - '8088:8088'

Так nginx слушает Port 80 и Port 443, а Spring Boot работает на Port 8088

Я могу получить доступ к сайту по http. DNS-сопоставление выполнено правильно, но при попытке выдать сертификат с помощью этой команды

docker run -it --rm --name certbot \
            -v "/data/certbot/conf:/etc/letsencrypt" \
            -v "/data/certbot/www:/var/www/certbot" \
            certbot/certbot certonly

я получаю эту ошибку

Challenge failed for domain blab.com
http-01 challenge for blab.com
Cleaning up challenges
Some challenges have failed.

IMPORTANT NOTES:
 - The following errors were reported by the server:

   Domain: blab.com
   Type:   unauthorized
   Detail: Invalid response from
   http://blab.com/.well-known/acme-challenge/sdaglkoweg235362gnvoerg
   [my_ip]: "<html>\r\n<head><title>404 Not
   Found</title></head>\r\n<body>\r\n<center><h1>404 Not
   Found</h1></center>\r\n<hr><center>nginx/1.17.8</ce"

   To fix these errors, please make sure that your domain name was
   entered correctly and the DNS A/AAAA record(s) for that domain
   contain(s) the right IP address.

blab.com - гипотетический сайт, а не исходный сайт ,

Это моя проблема. Любая помощь по этому вопросу будет принята с благодарностью. Спасибо

Ответы [ 2 ]

1 голос
/ 31 января 2020

Я думаю, вам может понадобиться добавить следующие параметры при вызове certbot:

docker run -it --rm --name certbot \
            -v "/data/certbot/conf:/etc/letsencrypt" \
            -v "/data/certbot/www:/var/www/certbot" \
            certbot/certbot certonly --webroot -w /var/www/certbot
0 голосов
/ 04 февраля 2020

Я только что заметил, что у вас есть относительные исходные пути in docker-compose.yaml:

    volumes:
      - ./data/nginx:/etc/nginx/conf.d
      - ./data/certbot/conf:/etc/letsencrypt
      - ./data/certbot/www:/var/www/certbot

, тогда как при запуске certbot вы используете абсолютные пути:

            -v "/data/certbot/conf:/etc/letsencrypt" \
            -v "/data/certbot/www:/var/www/certbot" \

Теоретически , если вы запустите touch /data/certbot/www/blah.txt на хосте сервера, вы сможете нажать http://blab.com/.well-known/acme-challenge/blah.txt с помощью curl или открыть его в браузере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...