Czy muszę duplikować dyrektywy Virtualhost dla portów 80 i 443?

Mam długą i skomplikowaną listę dyrektyw i muszę je powielić do osobnych grup dla portów 80 i 443, ponieważ używam SSL. Za każdym razem, gdy aktualizuję moje zasady mod_rewrite muszę pamiętać, aby zrobić to w obu miejscach, albo złamię moją aplikację... ta duplikacja prosi o kłopoty. Czy istnieje sposób na łączenie lub aliasy tych -- jedyna różnica między nimi jest taka, że wersja portu 443 zawiera SSLEngine, SSLCertificateFile i na przykład.

Mój zawiera wiele reguł mod_rewrite, reguł LocationMatch, dyrektyw CGI, itp.

Również, nie mogę użyć .pliki htaccess.

Author: scotts, 2009-03-25

6 answers

Nie możesz użyć dyrektywy include do włączenia wspólnych zasad. Tutaj

Artykuł

Np.:

<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>  
 47
Author: sfossen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-11 16:55:42

Możesz użyć dowolnego # hostów i portów w jednej dyrektywie Virtualhost.

<VirtualHost addr[:port] [addr[:port]] ...> ... </VirtualHost> 
W moim przypadku używałem.
<VirtualHost *:80 *:443>
  ServerName loop.lk

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

</VirtualHost>
 33
Author: Sampath Perera,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-13 10:24:19

Przepraszam, że podrzucam taki stary post, ale żeby pomóc innym Googlerom chciałem się podzielić tym, jak sobie z tym radziłem:

Mam kilka vhostów na moim localhost, powiedzmy: localhost, foo.com, bar.com

Będąc stroną localhost na moim laptopie (macosx), mogłem ujść na sucho z podpisanymi certyfikatami, a zatem część ssl jest taka sama dla wszystkich vhostów...

To co zrobiłem to:

Utworzyłem katalog /etc/apache2/extra/vhosts/.

Stworzyłem /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

I na koniec /etc/apache2/extra/vhosts/ssl.conf:

SSLEngine on
SSLCertificateFile "/etc/apache2/ssl/server.crt"
SSLCertificateKeyFile "/etc/apache2/ssl/server.key"

I w moim /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>
 8
Author: RemyNL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-25 13:47:34

Możesz umieścić wspólną konfigurację w osobnym pliku i dołączyć ją do obu segmentów VirtualHost. Na przykład:

<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>
 2
Author: sme,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-17 21:50:26

Można również określić wspólne dyrektywy w kontenerze, a nie w samym kontenerze. To właśnie robię, głównie dlatego, że preferuję reguły mod_rewrite na poziomie katalogu zamiast na poziomie serwera, ale powinno to działać równie dobrze dla Ciebie.

 0
Author: Matt Jacob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-24 23:11:45

Inną opcją zamiast Include jest użycie Macro (dzięki czemu możesz przechowywać wszystko w jednym pliku).

Najpierw Włącz moduł makra:

a2enmod macro

Następnie umieść udostępnione rzeczy w makrze i use to z Twoich virtualhostów:

<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>

Makra mogą również przyjmować parametry i być definiowane w innych plikach, które są dołączone; dzięki czemu można ich używać trochę jak funkcji i zapisać wiele duplikacji w plikach konfiguracyjnych Apache.

Zobacz tutaj po więcej szczegóły:

Https://httpd.apache.org/docs/2.4/mod/mod_macro.html

 0
Author: Seb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-17 20:21:40