Я использую стек 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. Видеть Вот