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

Предотвращение избыточности виртуальных хостов http и https с помощью Webmin + Apache

Я настраиваю общедоступный веб-сервер для нескольких моих собственных веб-сайтов, используя Webmin и Apache 2.

Добавление виртуального хоста и специальных опций для него с Webmin довольно просто.

Однако мне нужен совет о том, как настроить конфигурацию http и https, используя одни и те же параметры.

В настоящее время я использую два виртуальных хоста, один для порта 80 и один для порта 443. Это создает два отдельных файла .conf. Проблема в том, что каждый раз, когда я добавляю опцию к одному виртуальному хосту, я должен помнить, что делал то же самое и для другого.

Как я могу избежать этого избыточного дублирования параметров на сайте?

Я знаю о директиве «Include», но как мне эффективно управлять этим с помощью Webmin, чтобы Webmin не запутался? Полагаю, мне придется вручную создать включаемый файл и переместить в него некоторые директивы, прежде чем добавлять второй виртуальный хост с опцией SSL?

Как к этому подходят другие?

В принципе, это похоже на этот вопрос, но с добавлением Webmin.

Как мне эффективно управлять этим с помощью Webmin?

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

  • Легко использовать без знания файлов конфигурации => веб-панели конфигурации.
  • Легко управлять и воспроизводить => файлы конфигурации с помощью Includeс, макросы и т.п.

Как настроить конфигурацию http и https, используя одни и те же параметры?

Без Webmin. Если это цель, вы должны использовать Includes и макросы. Если у вас есть несколько имен хостов с одинаковыми настройками и вы регулярно меняете некоторые настройки для всех, было бы идеально создать <Macro> и скормить изменяющиеся детали с помощью Use. Для одинаковых http и https:

<Macro VHost $name $domain>
<VirtualHost *:80>
    ServerName $domain
    ServerAlias www.$domain

    DocumentRoot "/var/www/vhosts/$name"
    ErrorLog "/var/log/httpd/$name.error_log"
    CustomLog "/var/log/httpd/$name.access_log" combined
</VirtualHost>
<VirtualHost *:443>
    ServerName $domain
    ServerAlias www.$domain

    SSLEngine on
    SSLCertificateFile "/path/to/$domain.cert"
    SSLCertificateKeyFile "/path/to/$domain.key"

    DocumentRoot "/var/www/vhosts/$name"
    ErrorLog "/var/log/httpd/$name.error_log"
    CustomLog "/var/log/httpd/$name.access_log" combined
</VirtualHost>
</Macro>

Use VHost example1 example.com
Use VHost example2 example.net

UndefMacro VHost

Однако, если эти идентичные http и https для каждого домена указывают на то, что у вас есть действующий сертификат для каждого доамина, зачем вообще разрешать HTTP-соединения? Вы можете просто перенаправить весь http на https и забыть о необходимости дважды настраивать что-либо. Конфигурация http будет действительно простой и статичной:

  • Используя макросы, внутри <Macro>:

    <VirtualHost *:80>
        ServerName $domain
        ServerAlias www.$domain
    
        Redirect / https://$domain/
    </VirtualHost>
    <VirtualHost *:443>
    
  • Глобальное перенаправление виртуального хоста http по умолчанию (первый) на соответствующий https, например, mod_rewrite:

    <VirtualHost *:80>
        ServerName default.example.com
    
        RewriteEngine On
        RewriteRule (.*) https://%{SERVER_NAME}/$1 [R,L]
    </VirtualHost>
    
  • Любой другой подход для перенаправления http на https.