Должен ли я дублировать директивы 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" commonA
/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" commonA
/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это из ваших виртуальных хостов:<Macro SharedStuff> ServerName example.com ServerAdmin [email protected] <DocumentRoot /var/www/example> ... </DocumentRoot> </Macro> <VirtualHost *:80> Use SharedStuff </VirtualHost> <VirtualHost *:443> Use SharedStuff SSLEngine On SSLProtocol All -SSLv2 -SSLv3 ... </VirtualHost>макросы также могут принимать параметры и определяться в других файлах, которые включены; поэтому вы можете использовать их немного как функции и сохранять много дублирования в ваших файлах конфигурации Apache.
посмотреть здесь для более подробной информации:
Comments