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

Настройка Let's Encrypt для поддомена, который указывает на другой хост

Я пытаюсь настроить двухсерверную систему, где один выполняет веб-хостинг, а другой - доставку контента (CDN) для сервера веб-хоста.

В настоящее время у меня есть два сервера, и на обоих есть Let's Encrypt SSL.

веб-хостинг https://example.com

example.com 123.123.123.123

CDN https://foo.com

foo.com 111.111.111.111

Я установил субдомен на свой сервер веб-хостинга: cdn.example.com, который указывает на сервер CDN foo.com 111.111.111.111.

Проблема в том, что cdn.example.com не имеет Let's Encrypt SSL.

Как получить SSL-шифрование Let's Encrypt для cdn.example.com что указывает на foo.com 111.111.111.111?

Когда я бегу:

certbot --apache --cert-name example.com -d cdn.example.com

Выдает ошибку:

Failed authorization procedure. cdn.example.com (http-01): urn:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from http://cdn.example.com/.well-known/acme-challenge/PaKenmvAqHoOdOBUhThxxxxx: "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML
2.0//EN\">\n<html><head>\n<title>404 Not Found</title>\n</head><body>\n<h1>Not Found</h1>\n<p"

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

   Domain: cdn.example.com    Type:   unauthorized    Detail: Invalid response from    http://cdn.example.com/.well-known/acme-challenge/PaKenmvAqHoOdOBUhThxxxxx: "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML
   2.0//EN\">\n<html><head>\n<title>404 Not    Found</title>\n</head><body>\n<h1>Not Found</h1>\n<p"

   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.

Запуск установки Debian и Apache2 по умолчанию.

Полагаю, мне нужно вручную установить файлы acme-challenge на моем сервере CDN? Какие команды мне следует запускать?

Чтобы добиться желаемого: вы можете скопировать SSL-конфигурацию домена CDN (https://foo.com) и отредактируйте его для домена cdn.example.com; просто замените следы foo.com с участием cdn.example.com.

Я не могу более подробно рассказать об этом процессе, так как не знаю конфигурации вашего сервера.

Однако в качестве предложения (поскольку я не знаю ваших точных требований) мне кажется, что вам действительно не нужен отдельный домен для вашего CDN. На другом сервере вы можете просто создать конфигурацию для cdn.example.com.

Короткий ответ: «Нет». Вам не нужен SSL на дополнительном хосте (foo.com).

Вот все, что вам нужно сделать:

  1. Создать SSL для cdn.example.com
  2. Настроить обратный http-прокси на вашем cdn.example.com. Таким образом, все запросы HTTPS будут предоставляться с действительным ssl от cdn.example.com, но контент будет обслуживаться с использованием HTTP-контента http://foo.com

Конфигурация Apache: https://www.digitalocean.com/community/questions/apache-proxypass-and-reverseproxy-to-a-ssl-https-configured-domain

Вот пример того, как я бы сделал это с помощью NGINX:

server  {
    listen  443 ssl;
    server_name  cdn.example.com;
    ssl  on;
#BEGIN OPTIONAL--in case you want to have more stats on foo.com
    proxy_set_header Host            $host;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header ClientIP $remote_addr;
#END OPTIONAL--
    ssl_certificate /etc/ssl/cdn.example.com.pem;
    ssl_certificate_key /etc/ssl/cdn.example.com.key;
    location  / {
            proxy_pass  http://foo.com:80/;
    }
}