Question

J'ai une liste longue et complexe de directives , et je dois les dupliquer en groupes séparés pour les ports 80 et 443 parce que je suis en utilisant SSL. Chaque fois que je mets à jour mes règles mod_rewrite Je dois me rappeler de le faire dans les deux endroits ou je vais te casser mon application ... cette duplication demande des ennuis. Est-il possible de combiner ou alias ces -. La seule différence entre les deux est que la version port 443 contient le SSLEngine, SSLCertificateFile etc.

Mon contient de nombreuses règles mod_rewrite, les règles de LocationMatch, directives CGI, etc.

En outre, je ne peux pas utiliser les fichiers .htaccess.

Était-ce utile?

La solution

Ne pouvez-vous utiliser un include pour inclure les règles communes.

article

par exemple:.

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

Autres conseils

Vous pouvez utiliser un nombre de ports hôtes et dans une seule directive Virtualhost.

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

Dans mon cas je.

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

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

</VirtualHost>

Désolé de faire monter un ancien poste comme celui-ci, mais afin d'aider d'autres Googlers là que je voulais partager comment je résignées:

J'ai quelques vhosts sur mon localhost, dites: localhost, foo.com, bar.com

Ceci étant un site localhost sur mon ordinateur portable (MacOSX) je pouvais sortir avec des certificats auto-signés et donc la partie ssl est la même pour tous les serveurs virtuels ...

Ce que je fait est le suivant:

J'ai créé le répertoire /etc/apache2/extra/vhosts/.

J'ai créé un /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

Et enfin un /etc/apache2/extra/vhosts/ssl.conf:

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

Et dans mon /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>

Une autre option au lieu d'utiliser l'aide est Include Macro (donc vous pouvez garder tout dans un seul fichier).

Tout d'abord activer le module macro:

a2enmod macro

Ensuite, placez vos éléments partagés dans une macro et à partir de vos 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>

Les macros peuvent également prendre des paramètres et être définis dans d'autres fichiers qui sont inclus; de sorte que vous pouvez les utiliser un peu comme fonctions, et d'économiser beaucoup de duplication dans vos fichiers de configuration Apache.

Voir ici pour plus de détails:

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

Vous pouvez mettre la configuration commune dans un fichier séparé et l'inclure dans les deux segments VirtualHost. Par exemple:

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

Vous pouvez également spécifier les directives communes dans un conteneur au lieu de l'intérieur lui-même. C'est ce que je fais, surtout parce que je préfère des règles mod_rewrite au niveau du répertoire au lieu d'au niveau du serveur, mais il devrait fonctionner aussi bien pour vous aussi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top