Управление различными веб-доменами, связанными с разными серверами, работающими на одной машине.

Вопрос или проблема

У меня есть локальная машина с Debian 12 в лаборатории компании.
На этой локальной машине работают разные серверы, доступные по разным веб-адресам.
Предположим, первый сервер доступен в Интернете по адресу: https://firstdomain.dnsprovider1.org
А второй доступен по адресу: https://seconddomain.dnsprovider2.org
Оба сервера работают в контейнерах Docker и слушают разные порты:

0.0.0.0:21300->21300/tcp, :::21300->21300/tcp
8971/tcp, 0.0.0.0:9969->8969/tcp, :::9969->8969/tcp, 0.0.0.0:9972->8972/tcp, :::9972->8972/tcp
0.0.0.0:5332->5332/tcp, :::5332->5332/tcp

Для этих веб-сайтов я настроил apache2, который слушает на портах 80 и 443 для перенаправления на соответствующие порты, например 21300 и 9969, как указано в конфигурационном файле Apache, например:

<VirtualHost *:80>
ServerName firstdomain.dnsprovider1.org
ServerAlias *.firstdomain.dnsprovider1.org
Redirect permanent / https://firstdomain.dnsprovider1.org
</VirtualHost>

<VirtualHost *:443>
ServerName firstdomain.dnsprovider1.org
ServerAlias *.firstdomain.dnsprovider1.org

SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/firstdomain.dnsprovider1.org/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/firstdomain.dnsprovider1.org/privkey.pem

ProxyPreserveHost On
ProxyPass / http://localhost:9969/
ProxyPassReverse / http://localhost:9969/

ErrorLog ${APACHE_LOG_DIR}/dmpr_error.log
CustomLog ${APACHE_LOG_DIR}/dmpr_access.log combined
</VirtualHost> 

Я использовал Let’sEncrypt для получения SSL-сертификатов, и все работает правильно. Все сервера доступны удаленно из Интернета. Я настроил перенаправление портов на роутере для портов 80 и 443.
Чтобы достичь серверов с компьютеров в одной локальной сети, я просто настроил файл hosts в /etc/hosts, добавив:
192.XXX.X.XXX firstdomain.dnsprovider1.org, где 192.XXX.X.XXX – это локальный IP-адрес машины в локальной сети.
В dnsprovider1.org я настроил веб-IP-адрес роутера, связанный с именем домена. Эта система хороша для наличия нескольких веб-серверов.

Теперь я нахожусь в ситуации, когда у нас есть собственное имя домена, связанное с веб-сайтом компании, скажем: www.mycompany.com
Я создал несколько страниц, которые перенаправляют на IP-адрес роутера, где находится локальная машина, хостающая все серверы, например www.mycompany.com/server1, www.mycompany.com/server2 и т. д.
Мне нужна система для управления ранее существующими доменными именами серверов и новыми, которые я хочу добавить. Скажем, мне нужно иметь 10 или 20 серверов, работающих на одной машине, и важно найти способ легко управлять всеми сертификатами. Я хочу использовать существующий и работающий сертификат для веб-сайта, размещенного на веб-хостинге.

Первый вопрос касается следующего. Какой лучший способ управлять множеством доменных имен, связанных с множеством серверов, работающих на одной машине и слушающих разные порты? Я подумал, что Caddy2 является решением, но хочу узнать ваше мнение, если это также может работать с Apache, и если да, то как?

Второй вопрос касается следующего. Как использовать SSL-сертификат домена www.mycompany.com, который хорошо работает на всех серверах? Это возможно? Следуя тем же процедурам предыдущих провайдеров DNS, т.е. $ sudo certbot --apache -d www.mycompany.com, он возвращает ошибку о том, что несанкционированно

$ sudo certbot --apache -d www.mycompany.com
Сохранение отладочного журнала в /var/log/letsencrypt/letsencrypt.log
Запрос сертификата для www.mycompany.com

Certbot не смог аутентифицировать некоторые домены (аутентификатор: apache). Сертификационный центр сообщил о следующих проблемах:
Домен: www.mycompany.com
Тип: неавторизовано
Детали: 39.56.289.27: Неверный ответ от https://www.mycompany.com/.well-known/acme-challenge/cEr8rw-2YMjxJW5NM1pS_HP-S4p32npL2hw-sIywXnM: 404

Подсказка: Сертификационный центр не смог подтвердить временные изменения конфигурации Apache, внесенные Certbot. Убедитесь, что указанные домены указывают на этот сервер Apache и что он доступен из Интернета.

Некоторые проблемы с вызовом не удались.
Обратитесь за помощью или ищите решения на https://community.letsencrypt.org. Смотрите журнал ошибок в /var/log/letsencrypt/letsencrypt.log или повторно запустите Certbot с -v для получения дополнительных сведений.

У меня нет доступа к сертификату домена www.mycompany.com, даже если я могу управлять веб-сайтом на WordPress, размещенным там. Какое могло бы быть решение?

Ответ или решение

Управление несколькими доменами на одном сервере с помощью Apache и Let’s Encrypt

Введение

В современных интернет-решениях важной задачей является надежное и эффективное управление множеством доменных имен, привязанных к различным серверам на одном физическом устройстве. Особенно актуально это для предприятий, использующих контейнеризацию, например Docker. В данной статье мы рассмотрим, как организовать подобное управление на базе Debian 12 с использованием Apache и Let’s Encrypt.

Управление доменными именами на Apache

Настройка виртуальных хостов в Apache

Apache предоставляет мощный механизм виртуальных хостов, который позволяет обрабатывать запросы на разные домены с одного IP-адреса. Для каждого сервера, работающего на разных портах, необходимо создать конфигурацию виртуального хоста. Основные шаги:

  1. Создание конфигурации виртуальных хостов:

    Для каждого домена создайте файл конфигурации в директории /etc/apache2/sites-available/. Например, для первого домена:

    <VirtualHost *:80>
       ServerName firstdomain.dnsprovider1.org
       Redirect permanent / https://firstdomain.dnsprovider1.org
    </VirtualHost>
    
    <VirtualHost *:443>
       ServerName firstdomain.dnsprovider1.org
       SSLEngine on
       SSLCertificateFile /etc/letsencrypt/live/firstdomain.dnsprovider1.org/fullchain.pem
       SSLCertificateKeyFile /etc/letsencrypt/live/firstdomain.dnsprovider1.org/privkey.pem
       ProxyPass / http://localhost:9969/
       ProxyPassReverse / http://localhost:9969/
    </VirtualHost>

    Аналогично создайте настройки для других доменов, указывая соответствующие порты и сертификаты.

  2. Активация конфигурации:

    После создания файлов, активируйте их с помощью команды:

    sudo a2ensite firstdomain.conf

    Не забудьте перезапустить Apache для применения изменений:

    sudo systemctl restart apache2

Подключение Caddy как альтернативы

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

firstdomain.dnsprovider1.org {
    reverse_proxy localhost:9969
    tls cert.pem key.pem
}

Caddy автоматически обрабатывает запросы на получение сертификатов из Let’s Encrypt.

Использование существующего SSL-сертификата

Если у вас уже есть сертификат для домена www.mycompany.com, и вы хотите использовать его для серверов, работающих на других портах, есть несколько способов сделать это:

  1. Создание поддоменов:

    Если вы можете создать поддомены, например server1.mycompany.com, вам будет проще управлять сертификатами и редиректами.

  2. Использование Certbot в режиме веб-сервера:

    Certbot требует, чтобы домен указывал на тот сервер, который будет генерировать сертификат. Убедитесь, что ваш DNS правильно настроен и направляет запросы на IP вашего веб-сервера. В случае, если вы получаете ошибку 404, это может означать, что Certbot не может получить доступ к временным файлам для аутентификации. Проверьте следующие моменты:

    • Убедитесь, что ваш домен www.mycompany.com действительно указывает на ваш IP.
    • Проверьте настройки файрвола и маршрутизатора, чтобы удостовериться, что порты 80 и 443 открыты.
    • Во избежание конфликта проверьте, нет ли других серверов, слушающих эти порты.

Заключение

Управление несколькими доменными именами и сертификатами на одном сервере — это задача, которая требует организации и понимания работы веб-серверов. Apache и Caddy предлагают мощные инструменты для этого. При наличии правильной конфигурации вы сможете без проблем масштабировать свое решение, добавляя новые домены и управляя SSL-сертификатами.

Оцените материал
Добавить комментарий

Капча загружается...