Carnet Wiki

Virtualhost pour la mutualisation

Version 12 — Novembre 2018 Loiseau2nuit

Rappels

De façon générale chaque site hébergé sur un serveur Apache est configuré comme VirtualHost par un fichier dans le répertoire /etc/apache2/sites-available et activé par un lien dans le répertoire /etc/apache2/sites-enabled. Voir la documentation de Apache à ce sujet : Hôtes virtuels

Options de mise en œuvre

Un seul fichier Virtualhost

Étant donné que les différents sites mutualisés sous SPIP doivent pointer sur le même répertoire SPIP il est possible de les déclarer tous dans le même VirtualHost de la façon suivante :

<code class=« apache  »>
>

ServerName site1.tld
ServerAlias www.site1.tld
ServerAlias site2.tld
ServerAlias www.site2.tld

DocumentRoot « /var/www/spip »

Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all


Inconvénients de cette méthode : les autres éléments de configuration du site seront aussi partagés. En particulier il ne sera pas possible de configurer ErrorLog et CustomLog pour chaque site et les fichiers de log se retrouveront mélangés.

<blockquote> Loiseau2nuit 11.04.2018 idem pour tout ce qui concerne la config propre au HTTPS. En effet, la validation du certif SSL ne passe pas quand le domaine qui l’utilise n’est pas le même que celui qui a issu le certif. (Je ne reviendrai pas sur l’intérêt du SSL pour vos sites. Plus d’info ici : https://technique.arscenic.org/ssl-... et Passer un site SPIP sous https://)

<VirtualHost *:443>
    ServerName site1.tld  # souvent, le "site maitre"
    # ensuite, selon les cas
    ServerAlias www.site1.tld truc.site1.tld machin.site1.tld  ...
    # ou 
    ServerAlias *.site1.tld # pour gérer TOUS les sous domaines de site1.tld
    DocumentRoot "/var/www/spip"
    # etc ... 
    SSLEngine On
    SSLCertificateFile /etc/letsencrypt/certs/site1.tld/cert.pem 
    # etc ...
</VirtualHost>
</blockquote>

D’autres considérations de sécurité / confidentialité / séparations entre les sites pourraient être à considérer. Par exemple, le paquet Debian crée un fichier de configuration spécifique pour le répertoire de mutualisation, puis propose de créer ensuite un fichier Virtualhost par site, cf. plus bas. La protection consiste à ne pas accepter les liens symboliques ni les fichiers .htaccess dans les répertoires se sites :

<code class=« apache  »>
>

Options +FollowSymLinks
AllowOverride All
order allow,deny
allow from all

# some directories must be protected

Options -FollowSymLinks
AllowOverride None

Un fichier Virtualhost par site

<code class=« apache  »>
>

ServerName site1.tld
ServerAlias www.site1.tld

DocumentRoot « /var/www/spip »

Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all



pour site1.tld

<code class=« apache  »>
>

ServerName site2.tld
ServerAlias www.site2.tld

DocumentRoot « /var/www/spip »

Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all



pour site2.tld

Il est également possible de configurer ErrorLog et CustomLog différemment pour chaque site, et ajouter quelques protections (interdiction de taper dans le répertoire tmp ou d’exécuter du php qui se serait logé dans le répertoire IMG).

L’exemple de configuration proposé par Debian :

<code class=« apache  »>
>

ServerAdmin admin@domain.org
ServerName spip.domain.org

DocumentRoot /var/www/spip
Alias /IMG /var/www/spip/sites/default/IMG


Options FollowSymLinks
AllowOverride None

# Deny access to /tmp :

deny from all

# Disable scripts in /IMG :

php_flag engine Off

ErrorLog /var/log/apache2/spip.domain.org-error.log

# Possible values include : debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog /var/log/apache2/spip.domain.org-access.log combined
ServerSignature On

Cette prise de notes est faite pour rendre service... Et recueillir d’autres comptes rendus d’expérience pour éclairer la mienne ;-)

... 6 ans plus tard, je reviens utiliser mes notes pour refaire une install mutualisée, et je reconnais la phrase précédente qui m’avait servi de conclusion. Amusant et pertinent, effectivement le contenu c’est enrichi. Merci ;-)