J'ai une liste longue et complexe de directives <VirtualHost>, et je dois les dupliquer dans des groupes <VirtualHost> séparés pour les ports 80 et 443 car j'utilise SSL. Chaque fois que je mets à jour mes règles mod_rewrite, je dois me souvenir de le faire aux deux endroits, sinon je casse mon application ... cette duplication pose des problèmes. Existe-t-il un moyen de les combiner ou de les alias - la seule différence entre les deux est que la version du port 443 contient le SSLEngine, SSLCertificateFile et similaires.
Mon <Virtualhost> contient de nombreuses règles mod_rewrite, règles LocationMatch, directives CGI, etc.
De plus, je ne peux pas utiliser de fichiers .htaccess.
Ne pouvez-vous pas utiliser une directive include pour inclure les règles communes. ici
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>
Vous pouvez utiliser n'importe quel nombre d'hôtes et de ports dans une seule directive Virtualhost.
<VirtualHost addr[:port] [addr[:port]] ...> ... </VirtualHost>
Dans mon cas, j'ai utilisé.
<VirtualHost *:80 *:443>
ServerName loop.lk
....
SSLEngine on
SSLCertificateFile /etc/Apache2/ssl/local.crt
</VirtualHost>
Désolé de remonter un vieux post comme celui-ci, mais afin d'aider d'autres Googleurs là-bas, je voulais partager comment je l'ai traité:
J'ai quelques vhosts sur mon hôte local, dites: localhost
, foo.com
, bar.com
Ceci étant un site localhost sur mon ordinateur portable (macosx), je pourrais m'en tirer avec des certificats auto-signés et donc la partie ssl est la même pour tous les vhosts ...
Voici ce que j'ai fait:
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
UNE /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
UNE /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 Include
utilise Macro
(vous pouvez donc tout garder dans un seul fichier).
Activez d'abord le module macro:
a2enmod macro
Ensuite, mettez vos trucs partagés dans une macro et use
à partir de vos hôtes virtuels:
<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>
Les macros peuvent également prendre des paramètres et être définies dans d'autres fichiers inclus; afin que vous puissiez les utiliser un peu comme les fonctions et économiser beaucoup de duplication dans vos fichiers de configuration Apache.
Voir ici pour plus de détails:
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 plutôt que dans le conteneur lui-même. C'est ce que je fais, principalement parce que je préfère les règles mod_rewrite au niveau du répertoire plutôt qu'au niveau du serveur, mais cela devrait aussi bien fonctionner pour vous.