Как мне настроить несколько виртуальных хостов с одним файлом конфигурации в Apache?

Система

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>

Спасибо.

1
задан 20 September 2019 в 20:57

1 ответ

В дополнение к предложенному дублированию вот немногие характерные для этого вопроса ответы:

Как я устанавливаю 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
1
ответ дан 7 December 2019 в 14:58

Другие вопросы по тегам:

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