Dois-je dupliquer les directives VirtualHost pour le port 80 et 443?
-
21-08-2019 - |
Question
J'ai une liste longue et complexe de directives
Mon
En outre, je ne peux pas utiliser les fichiers .htaccess.
La solution
Ne pouvez-vous utiliser un include pour inclure les règles communes.
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:
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.