Apache: как «скрыть» поддомен, но обслуживать его по протоколу https

Apache: как «скрыть» поддомен, но обслуживать его по протоколу https

Я открыто признаю свое невежество — или, может быть, достаточные знания, чтобы представлять опасность.

У меня есть поддомен http://db.<mydomain>.com, который обслуживает утилиту phpMyAdmin. В настоящее время он находится в каталоге с директивой Apache, требующей действительного пользователя из .htaccess, что имело смысл в то время, поскольку я не хотел выставлять страницу входа в phpMyAdmin для широкой публики.

Проблема возникла при попытке использовать cert-bot для создания SSL-сертификатов для моего сайта. Он не может проверить вызов ACME, поскольку вызов не может обойти ограничение .htaccess.

Как можно одновременно обслуживать этот поддомен по протоколу https и при этом требовать дополнительный уровень безопасности, прежде чем пользователь сможет увидеть страницу входа в phpMyAdmin?

   <VirtualHost *:80>
        ServerName db.<mydomain>.com
        ServerAlias www.db.<mydomain>.com
        DocumentRoot /var/www/subdomains/db/phpMyAdmin
    </VirtualHost>
    <Directory "/var/www/subdomains/db">
        Options Indexes FollowSymLinks ExecCGI
        Order allow,deny
        Allow from all
        AuthType Basic
        AuthUserFile "/var/www/.htpasswd-users"
        require valid-user
    </Directory>

решение1

<Directory "/var/www/subdomains/db">
    Options Indexes FollowSymLinks ExecCGI
    Order allow,deny
    Allow from all
    AuthType Basic
    AuthUserFile "/var/www/.htpasswd-users"
    require valid-user
</Directory>

Вам следует удалить директивы Orderи Allow. Это директивы Apache 2.2 старого образца, которые ранее были устарели в Apache 2.4 и, скорее всего, вызовут конфликты (но они в любом случае не требуются).

Хотя любопытно, почему у вас есть <Directory>раздел для /var/www/subdomains/db, но при этом DocumentRootопределяется как /var/www/subdomains/db/phpMyAdmin?

Затем добавьте дополнительный <Directory>раздел для /.well-known/пути к файлу, в котором вы разрешаете неограниченный доступ, чтобы certbot мог «проверить вызов ACME». Например:

<Directory "/var/www/subdomains/db/phpMyAdmin/.well-known">
    Require all granted
</Directory>

решение2

Есть как минимум три способа решить эту проблему:

  1. ИспользоватьDNS-вызов, не требующий HTTP-соединения
  2. Отключить базовую аутентификацию для .well-known/-pathкоторый используется certbot.
  3. Использовать автономный модуль certbot. Это приведет к простою в 10-20 секунд

решение3

Одним из возможных способов является добавление ограничений доступа для виртуального хоста следующим образом:

<Directory "/www/docs/db">
    <RequireAll>
        Require ip <localip> <certbot host-name>
    </RequireAll>
</Directory>

Более подробную информацию о Requireдирективе вы можете найти на сайтеApache-документ.

Связанный контент