SubDomaine et Multi Domaine avec Apache (Node/Php/Services ..)

Un petit Tuto rapide, vous expliquant comment gérer facilement des sous-domaines / multi domaines avec Apache. Pour des services en Php, Node, ou autres ...
Venant de lancer weareopensource.me, nous l'avons réalisé ce weekend. Nous partons du principe qu'Apache2 est déjà installé sur la machine, et que vous accédez en ssh sur le serveur (ssh XX.XX.XX.XX -p port -l user).
I/ Apache
Pour tout service tournant sur des ports spécifiques, teamspeak, ouwncloud, seafile, gitlab... ou des sites web personnels sous node, nous devons installer deux "plugins" d'apache, "proxy" et "proxy http". Cela n'est pas nécessaire si vous n'avez que des sites classiques dans /var/www (html, php ..).
sudo a2enmod proxy proxy_http
sudo service apache2 restart
Votre serveur Apache est désormais prêt. Il vous faudra réaliser un fichier de configuration par site web / service. Ces fichiers de configuration se situeront dans etc/apache2.
cd etc/apache2/sites-available/
Vous avez deux types de fichier de configuration possible (pour faire simple).
- L'un permet de rediriger le traffic arrivant sur votre serveur depuis une adresse web vers un dossier de site web classique (php/html5 ....) situé dans /var/www.
Le voici :
<VirtualHost *:80>
ServerAdmin votreEmail@me.com
ServerName votre_nom_de_domaine_ou_subdomaine.fr
ServerAlias www.votre_nom_de_domaine_ou_subdomaine.fr
DocumentRoot /var/www/dossier_du_site/htdocs/
# LogFiles
ErrorLog /var/www/dossier_du_site/logs/error.log
CustomLog /var/www/dossier_du_site/logs/access.log combined
<Directory /var/www/dossier_du_site/htdocs>
Deny from none
Allow from all
Order allow,deny
AllowOverride none
Options -Indexes
</Directory>
</VirtualHost>
- Le second permet de rediriger le traffic arrivant sur votre serveur depuis une adresse web vers un port spécifique sur votre serveur, pour un site Web NodeJS par exemple :).
(Je met en fin d'article des exemples TeamSpeak / Gitlab / Seafile plus précis, avec le rewrite engine).
Le voici :
<VirtualHost *:80>
ServerAdmin votreEmail@me.com
ServerName votre_nom_de_domaine_ou_subdomaine.fr
ServerAlias www.votre_nom_de_domaine_ou_subdomaine.fr
# DocumentRoot non obligatoire pour tous les services, utile pour les sites node
DocumentRoot /var/www/dossier_du_site_node/
# LogFiles
ErrorLog /var/www/dossier_du_site_node/logs/error.log
CustomLog /var/www/dossier_du_site_node/lgos/access.log combined
ProxyRequests Off
ProxyPass / http://127.0.0.1:Port_du_site_node/
ProxyPassReverse / http://127.0.0.1:Port_du_site_node/
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from 127.0.0.1
</Proxy>
</VirtualHost>
Un fois votre fichier de configuration créé :
vi nom_du_site
Vous devez ajouter cette nouvelle configuration à Apache :
a2ensite nom_du_site
service apache2 reload
C'est terminé pour apache ;).
II/ Config du fournisseur de domaine
Coté Domaine, il faut renseigner l'adresse IP qui sera ciblée ce dernier. Voici un exemple sous OVH. Il faut se rendre dans la section Zone DNS de votre domaine. Vous pourrez alors ajouter des entrées.
Un champs de pointage de type A vous permettra d'ajouter des domaines / sous domaines.
Un champs de pointage de type CNAME vous permettra de lier www.votredomaine.com à votredomaine.com. De cette manière, vous n'aurez plus besoin de taper www pour accéder à votre service. Par sécurité, il faut tout de même le prendre en compte.
III/ Bonus
Config apache Gitlab
<VirtualHost *:80>
ServerAdmin votreEmail@me.com
ServerName gitlab.domaine.me
ServerAlias www.gitlab.domaine.me
ServerSignature Off
DocumentRoot /opt/gitlab/embedded/service/gitlab-rails/public
ProxyPreserveHost On
<Location />
Order deny,allow
Allow from all
ProxyPassReverse http://127.0.0.1:PORT
ProxyPassReverse http://gitlab.domaine.me/
</Location>
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule .* http://127.0.0.1:PORT%{REQUEST_URI} [P,QSA
</VirtualHost>
Config apache Seafile
<VirtualHost *:80>
ServerAdmin votreEmail@me.com
ServerName seafile.domaine.me
ServerAlias www.seafile.domaine.me
ServerSignature Off
DocumentRoot /var/www
ProxyPreserveHost On
<Location />
Order deny,allow
Allow from all
ProxyPassReverse http://127.0.0.1:PORT
ProxyPassReverse http://seafile.domaine.me/
</Location>
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule .* http://127.0.0.1:PORT%{REQUEST_URI} [P,QSA]
# needed for downloading attachments
</VirtualHost>
Config apache Teamspeak
<VirtualHost *:80>
ServerAdmin votreEmail@me.com
ServerName teamspeak.domaine.me
ServerAlias www.teamspeak.domaine.me
ServerSignature Off
ProxyPreserveHost On
<Location />
Order deny,allow
Allow from all
ProxyPassReverse http://127.0.0.1:PORT
ProxyPassReverse http://teamspeak.domaine.me/
</Location>
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule .* http://127.0.0.1:PORT%{REQUEST_URI} [P,QSA]
</VirtualHost>