В Apache2 на ubuntu мой сайт прослушивает 80, и теперь я хочу добавить SSL. Есть ли способ включить SSLEngine для порта 443, чтобы мне не нужно было копировать весь блок VirtualHost?
Когда я это сделаю:
Listen 80
Listen 443
NameVirtualHost *
<VirtualHost *>
SSLEngine On
... a bunch more lines...
</VirtualHost>
Он включает SSLEngine для порта 80. Есть ли способ использовать только один блок VirtualHost и включить SSLEngine только для порта 443? Так я могу сделать что-то подобное?
Listen 80
Listen 443
NameVirtualHost *
<VirtualHost *>
<IfPort 443>
SSLEngine On
</IfPort>
... a bunch of lines I don't want to copy into another VirutalHost block...
</VirtualHost>
Вы не можете заставить один виртуальный хост одновременно использовать HTTP и HTTPS, потому что это отдельные виртуальные хосты, обслуживающие разные протоколы. Вместо этого вы должны поместить всю общую конфигурацию в отдельный файл, а затем включить этот файл как в SSL, так и в vhosts без SSL для домена.
Минимальный пример:
# /etc/apache2/sites-available/example.com
<VirtualHost *:80>
Include /etc/apache2/domains/example.com
</VirtualHost>
<VirtualHost 192.0.2.1:443>
SSLEngine On
SSLCertificateFile /etc/ssl/example.com_crt
SSLCertificateKeyFile /etc/ssh/example.com_key
Include /etc/apache2/domains/example.com
</VirtualHost>
# /etc/apache2/domains/example.com
ServerName example.com
ServerAlias www.example.com
ServerAdmin webmaster@example.com
DocumentRoot /home/example/public_html
ErrorLog /home/example/apache/error.log
Как я уже упоминал по другому вопросу о stackoverflow (https://stackoverflow.com/questions/679383/do-i-have-to-duplicate-the-virtualhost-directives-for-port-80-and-443/52375167#52375167):
Другой вариант вместо использования Include
использует Macro
(чтобы вы могли хранить все это в одном файле).
Сначала включите модуль макроса:
a2enmod macro
Затем поместите ваши общие материалы в макрос и use
это из ваших виртуальных хостов:
<Macro SharedStuff>
ServerName example.com
ServerAdmin example@example.com
<DocumentRoot /var/www/example>
...
</DocumentRoot>
</Macro>
<VirtualHost *:80>
Use SharedStuff
</VirtualHost>
<VirtualHost *:443>
Use SharedStuff
SSLEngine On
SSLProtocol All -SSLv2 -SSLv3
...
</VirtualHost>
Макросы также могут принимать параметры и определяться в других включенных файлах; так что вы можете использовать их немного как функции и сохранить много дублирования в ваших файлах конфигурации Apache.
Подробнее см. Здесь:
Вы можете поместить настройки каталога в <Directory>
блокировать вне любых <VirtualHost>
блоки. Это применит их ко всем виртуальным хостам, но только внутри указанного пути.