Как настроить apache с несколькими веб-сайтами, используя один IP-адрес, отдельные файлы виртуального хоста и Cloudflare SSL

Я использую стек Ubuntu 16 LAMP. В настоящее время у меня настроены файлы виртуальных хостов для каждого домена с облачным DNS, указывающим на один и тот же IP-адрес для 2 сайтов Wordpress.

Я использую cloudflare для создания бесплатного сертификата TLS, подписанного Cloudflare, для установки на сервере для каждого domain.

Файлы хоста выглядят так

domain1.conf

<VirtualHost *:443>
    ServerAdmin webmaster@domain1.com
    ServerName domain1.net
    ServerAlias www.domain1.net
    DocumentRoot /var/www/html/domain1
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    SSLEngine      on
    SSLCertificateFile      /etc/ssl/certs/domain1.crt
    SSLCertificateKeyFile   /etc/ssl/private/domain1.key
</VirtualHost>

domain2.conf

<VirtualHost ip:443>
    ServerAdmin webmaster@domain1.com
    ServerName domain2.net
    ServerAlias www.domain2.net
    DocumentRoot /var/www/html/domain2
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    SSLEngine      on
    SSLCertificateFile      /etc/ssl/certs/domain2.crt
    SSLCertificateKeyFile   /etc/ssl/private/domain2.key
</VirtualHost>

Мои файлы сертификатов и ключей не являются файлами .pem, имеет ли это значение?

Нужно ли мне редактировать мои порты. conf файл? Прочитав другое предложение, я добавил первые две строки.

NameVirtualHost *:80

NameVirtualHost *:443

Listen 80

<IfModule ssl_module>
        Listen 443
</IfModule>

<IfModule mod_gnutls.c>
        Listen 443
</IfModule>
0
задан 15 August 2018 в 04:38
3 ответа

Вы обсуждаете SSL (по умолчанию 443 ), но в вашем примере вы используете 80 . Я полагаю, вам также необходимо перейти с http на https .

Я бы использовал разные файлы для разных доменов (следующая иерархия для Ubuntu, в RHEL / CentOS я использую ] vhosts.d ):

$ ls -1 sites-available/
domain1.net.conf
domain2.net.conf

Я использую нечто подобное следующему, чтобы перенаправить http на https .

<VirtualHost *:80>
        ServerAdmin webmaster@domain1.net
        ServerName domain1.net 

        RedirectMatch 301 ^(.*)$ https://domain1.net$1
</VirtualHost>

<VirtualHost *:443>
        ServerAdmin webmaster@domain1.net
        ServerAdmin office@domain1.net
        ServerName domain1.net
        ServerAlias *.domain1.net
        ServerSignature Off

        SSLEngine On
        SSLCertificateFile /your/path/to/fullchain.pem
        SSLCertificateKeyFile /your/path/to/privkey.pem
        SSLCertificateChainFile /your/path/to/chain.pem

        # LogLevel debug ssl:debug rewrite:trace8
        # LogLevel info ssl:warn rewrite:trace8
        LogLevel info

        ErrorLog ${APACHE_LOG_DIR}/domain1.net.error.log
        CustomLog ${APACHE_LOG_DIR}/domain1.net.access.log combined

</VirtualHost>

Да, вам нужен SSL. Если вы используете один и тот же сертификат для всех доменов, убедитесь, что у вас есть сертификат с использованием Альтернативное имя субъекта ^ 1 / SNI, как и для всех ваших доменов. Кроме того, это поле необходимо, если вы звоните в свою службу, используя IP-адрес вместо DN. В противном случае, если ваши вызовы используют DN, а не IP, вам не нужно указанное поле.

ОБНОВЛЕНИЕ: расширение файла не имеет значения. Содержание важно. Однако из соображений обслуживания рекомендуется придерживаться соглашения о расширении, основанного на содержимом файла. Подробнее о преобразовании сертификатов ^ 2

ОБНОВЛЕНИЕ: чтобы выбрать между SNI и SAN ^ 3 (также см. Комментарии @dave ), выберите, собираетесь ли вы использовать 1 сертификат или несколько сертификатов. Следствием этого является процесс обновления сертификатов. Если сертификаты поступают от разных клиентов, иногда это невозможно.

1
ответ дан 4 December 2019 в 15:52

Мои файлы сертификатов и ключей не являются файлами .pem, имеет ли это значение?

Это зависит от того, что вы подразумеваете под файлами .pem . Если вы имеете в виду, что содержимое файла - это DER в кодировке Base-64, это имеет значение. Из документации mod_ssl :

Эта директива указывает на файл с данными сертификата в формате PEM.

Если по .pem вы просто имеете в виду, что расширение не .pem , в то время как содержимое представляет собой DER в кодировке Base-64, все будет в порядке - только Microsoft заботится о расширении файла.

Вы узнаете, если они в неправильном формате, так как Apache откажется запускаться.


Нужно ли мне редактировать мой файл ports.conf?

Если в вашем ports.conf нет записи для порта 443, вы нужно будет добавить. В противном случае нет.

0
ответ дан 4 December 2019 в 15:52

Если у вас разные домены, вам понадобятся разные сертификаты, по одному для каждого домена. Чтобы это работало, вам потребуется указание имени сервера, SNI. См. Здесь

0
ответ дан 4 December 2019 в 15:52

Теги

Похожие вопросы