Подтвердить что ты не робот

Нужно ли дублировать директивы Virtualhost для портов 80 и 443?

У меня есть длинный и сложный список <VirtualHost> директивы, и я должен дублировать их в отдельный <VirtualHost> группы для портов 80 и 443, потому что я использую SSL. Всякий раз, когда я обновляю свои правила mod_rewrite, я должен помнить, чтобы делать это в обоих местах, иначе я сломаю свое приложение... это дублирование требует неприятностей. Есть ли способ объединить или перечислить их - единственная разница между ними состоит в том, что версия порта 443 содержит SSLEngine, SSLCertificateFile и т.п.

My <Virtualhost> содержит много правил mod_rewrite, правила LocationMatch, директивы CGI и т.д.

Кроме того, я не могу использовать файлы .htaccess.

4b9b3361

Ответ 1

Нельзя использовать директиву 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>  

Ответ 2

Вы можете использовать любое количество хостов и портов в одной директиве Virtualhost.

<VirtualHost addr[:port] [addr[:port]] ...> ... </VirtualHost> 

В моем случае я использовал.

<VirtualHost *:80 *:443>
  ServerName loop.lk

 ....
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/local.crt

</VirtualHost>

Ответ 3

Извините, что столкнулся с таким старым сообщением, но для того, чтобы помочь другим гуглерам, я хотел поделиться тем, как я с ним справился:

У меня есть пара 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>

Ответ 4

Вы можете поместить общую конфигурацию в отдельный файл и включить ее в оба сегмента 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>

Ответ 5

Вы также можете указать общие директивы внутри контейнера, а не внутри себя. Это то, что я делаю, в основном потому, что предпочитаю правила mod_rewrite на уровне каталога, а не на уровне сервера, но он также должен работать одинаково хорошо для вас.