Должен ли я дублировать директивы Virtualhost для портов 80 и 443?
У меня есть длинный и сложный список директив , и я должен дублировать их в отдельные группы для портов 80 и 443, потому что я использую SSL. Всякий раз, когда я обновляю свои правила mod_rewrite, я должен помнить, чтобы сделать это в обоих местах, иначе я сломаю свое приложение... это дублирование напрашивается на неприятности. Есть ли способ объединить или псевдонимы - единственное различие между ними заключается в том, что версия порта 443 содержит SSLEngine, SSLCertificateFile и как.
My содержит множество правил mod_rewrite, правил LocationMatch, директив CGI и т. д.
кроме того, я не могу использовать .htaccess файлы.
6 ответов
нельзя ли использовать директиву include для включения общих правил. здесь
например.:
<VirtualHost _default_:80>
...
include conf/common_rule.conf
</VirtualHost>
<VirtualHost _default_:*>
...
include conf/common_rule.conf
</VirtualHost>
<VirtualHost _default_:443>
... #SSL rules
include conf/common_rule.conf
</VirtualHost>
вы можете использовать любое # хостов и портов в одной директиве Virtualhost.
<VirtualHost addr[:port] [addr[:port]] ...> ... </VirtualHost>
в моем случае я использовал.
<VirtualHost *:80 *:443>
ServerName loop.lk
....
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/local.crt
</VirtualHost>
извините, чтобы поднять старый пост, как это, но для того, чтобы помочь другим гуглерам там я хотел поделиться, как я справился с этим:
у меня есть пара vhosts на моем localhost, скажите:localhost
, foo.com
, bar.com
это локальный сайт на моем ноутбуке (macosx), я мог бы уйти с самозаверяющими сертификатами, и, следовательно, ssl-часть одинакова для всех vhosts...
вот что я сделал:
я создал каталог /etc/apache2/extra/vhosts/
.
я создал /etc/apache2/extra/vhosts/localhost.conf
:
ServerName localhost
DocumentRoot "/www/localhost"
<Directory /www/localhost>
Require all granted
</Directory>
ErrorLog "/var/log/apache2/localhost.error_log"
CustomLog "/var/log/apache2/localhost.access_log" common
A /etc/apache2/extra/vhosts/foo.conf
:
ServerName foo.com
DocumentRoot "/www/foo.com"
<Directory /www/foo.com>
Require all granted
</Directory>
ErrorLog "/var/log/apache2/foo.com.error_log"
CustomLog "/var/log/apache2/foo.com.access_log" common
A /etc/apache2/extra/vhosts/bar.conf
:
ServerName bar.com
DocumentRoot "/www/bar.com"
<Directory /www/bar.com>
Require all granted
</Directory>
ErrorLog "/var/log/apache2/bar.com.error_log"
CustomLog "/var/log/apache2/bar.com.access_log" common
и наконец /etc/apache2/extra/vhosts/ssl.conf
:
SSLEngine on
SSLCertificateFile "/etc/apache2/ssl/server.crt"
SSLCertificateKeyFile "/etc/apache2/ssl/server.key"
и в моем /etc/apache2/extra/httpd-vhosts.conf
:
<VirtualHost *:80>
Include /etc/apache2/extra/vhosts/localhost.conf
</VirtualHost>
<VirtualHost *:443>
Include /etc/apache2/extra/vhosts/localhost.conf
Include /etc/apache2/extra/vhosts/ssl.conf
</VirtualHost>
<VirtualHost *:80>
Include /etc/apache2/extra/vhosts/foo.conf
</VirtualHost>
<VirtualHost *:443>
Include /etc/apache2/extra/vhosts/foo.conf
Include /etc/apache2/extra/vhosts/ssl.conf
</VirtualHost>
<VirtualHost *:80>
Include /etc/apache2/extra/vhosts/bar.conf
</VirtualHost>
<VirtualHost *:443>
Include /etc/apache2/extra/vhosts/bar.conf
Include /etc/apache2/extra/vhosts/ssl.conf
</VirtualHost>
вы можете поместить общую конфигурацию в отдельный файл и включить ее в оба сегмента VirtualHost. Например:
<VirtualHost 192.168.1.2:80>
Include conf/common.conf
</VirtualHost>
<VirtualHost 192.168.1.2:443>
Include conf/common.conf
(put your ssl specific cofiguration stuff here ...)
</VirtualHost>
вы также можете указать общие директивы внутри контейнера, а не внутри самого контейнера. Это то, что я делаю, в основном потому, что я предпочитаю правила mod_rewrite на уровне каталога, а не на уровне сервера, но он должен работать одинаково хорошо для вас тоже.
другой вариант вместо использования Include
использует Macro
(таким образом, вы можете сохранить все это в одном файле).
сначала включите модуль макроса:
a2enmod macro
затем поместите свой общий материал в макрос и use
это из ваших virtualhosts:
<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.
посмотреть здесь для более подробной информации: