Система
Linux hosek 4.15.0-48-generic #51-Ubuntu SMP Wed Apr 3 08:28:49 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
Проблема
Как настроить несколько виртуальных хостов с одним файлом конфигурации в Apache, используя ssl с перенаправлением ?
Что нужно и не нужно в моей конфигурации ниже? Можно ли, например, установить Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/hosek/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/hosek/privkey.pem
только для начала файла? Для всех vhost
с?
Можно ли сделать всю конфигурацию одним файлом, особенно одним VirtualHost
? У меня есть 2 файла: один для 80
, второй для 443
.
Пример моих vhost
с.
no-ssl.conf
файл.
<VirtualHost *:80>
ServerName www.thehatmakers.cz
ServerAlias thehatmakers.cz
RewriteCond %{HTTP_HOST} ^(thehatmakers.cz) [NC]
RewriteRule ^(.*)$ http://www.thehatmakers.cz$1 [R=301,L]
RewriteCond %{SERVER_NAME} =www.thehatmakers.cz
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
<VirtualHost *:80>
ServerName www.obrazduse.cz
ServerAlias obrazduse.cz
RewriteCond %{HTTP_HOST} ^(obrazduse.cz) [NC]
RewriteRule ^(.*)$ http://www.obrazduse.cz$1 [R=301,L]
RewriteCond %{SERVER_NAME} =www.obrazduse.cz
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
ssl.conf
файл.
<VirtualHost *:443>
ServerName www.thehatmakers.cz
ServerAlias thehatmakers.cz
RewriteCond %{HTTP_HOST} ^(thehatmakers.cz) [NC]
RewriteRule ^(.*)$ http://www.thehatmakers.cz$1 [R=301,L]
DocumentRoot /var/www/html/thehatmakers
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/hosek/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/hosek/privkey.pem
</VirtualHost>
<VirtualHost *:443>
ServerName www.obrazduse.cz
ServerAlias obrazduse.cz
RewriteCond %{HTTP_HOST} ^(obrazduse.cz) [NC]
RewriteRule ^(.*)$ http://www.obrazduse.cz$1 [R=301,L]
DocumentRoot /var/www/html/obrazduse
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/hosek/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/hosek/privkey.pem
</VirtualHost>
Спасибо.
Обновление
Если это невозможно сделать с 1 VirtualHost, как насчет этой конфигурации? Есть ли более короткий способ сделать это? Можно ли использовать Redirect
для ssl? Как я прокомментировал *:443
конфигурацию? Могу ли я использовать Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/hosek/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/hosek/privkey.pem
вне конфигурации VirtualHost
? А как насчет Google, это нормально с этим перенаправлением? Я использую 1 сертификат для всех доменов, это нормально?
<VirtualHost *:80>
ServerName www.thehatmakers.cz
ServerAlias thehatmakers.cz
Redirect / https://www.thehatmakers.cz
</VirtualHost>
<VirtualHost *:443>
ServerName www.thehatmakers.cz
ServerAlias thehatmakers.cz
#Redirect / https://www.thehatmakers.cz
RewriteCond %{HTTP_HOST} ^(thehatmakers.cz) [NC]
RewriteRule ^(.*)$ https://www.thehatmakers.cz$1 [R=301,L]
DocumentRoot /var/www/html/thehatmakers
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/hosek/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/hosek/privkey.pem
</VirtualHost>
Спасибо.
В дополнение к предложенному дублированию вот немногие характерные для этого вопроса ответы:
Как я устанавливаю HTTPS виртуальный хост с
ServerAlias
используемый.
Если Вы используете ServerAlias
директива в HTTPS/SSL виртуальный хост необходимо выпустить сертификаты для всех доменных имен. При помощи letsencrypt
необходимо будет добавить немногих -d
опции:
sudo letsencrypt --apache .... -d www.example.com -d example.com
Все сертификаты будут помещены в тот же файл сертификата.
Действительно ли возможно сделать целую конфигурацию в один файл, особенно один VirtualHost? У меня есть 2 файла теперь, один для 80, второй для 443.
Можно поместить определения для всего VirtualHosts в одном файле, таким образом будет легко включить и отключить всех их вместе. Но нет никакого способа настроить один VirtualHost для слушания на двух портах.
Что относительно
Redirect
вместо этогоRewrite
в конфигурации ssl?
Согласно документации Apache2 для таких случаев лучше использовать Redirect
директива вместо Rewrite
правила. Отметьте, необходимо создать два отдельных VirtualHosts, если Вы хотите перенаправить https://example.com
кому: https://www.example.com
. Все имели отношение, VirtualHosts может использовать тот же файл сертификата, сгенерированный в пути, описанном выше.
Каждый виртуальный хост будет ответственен за другое ServerName
, например: ServerName example.com
для первого, соответственно ServerName www.example.com
для второго, и т.д. Отметьте ServerAlias
директива должна быть удалена.
Если все работает, как это ожидается, можно продолжать использовать Rewrite
правила - это - предмет Вашего решения. Если Вы используете Redirect
директива, не пропускайте наклонную черту в конце целевого доменного имени! Вот пример для HTTPS VirtualHost, который использует Redirect
директива.
<VirtualHost *:443>
ServerName thehatmakers.cz
Redirect permanent "/" "https://www.thehatmakers.cz/"
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/hosek/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/hosek/privkey.pem
</VirtualHost>
Ключевое слово permanent
будет давать браузеру клиента команду делать это перенаправление в автоматически следующий раз:
Redirect
== HTTP 300
Redirect permanent
== HTTP 301