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

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

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

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

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

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, имеет ли это значение?

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

NameVirtualHost *:80

NameVirtualHost *:443

Listen 80

<IfModule ssl_module>
        Listen 443
</IfModule>

<IfModule mod_gnutls.c>
        Listen 443
</IfModule>

Вы обсуждаете 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 сертификат или несколько сертификатов. Следствием этого является процесс обновления сертификатов. Если сертификаты поступают от разных клиентов, иногда это невозможно.

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

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

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

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

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


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

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

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