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

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.

Champs de pointage de type A

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.

Champs de pointage de type CNAME


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>