Apache multi-service

Intro


L'utiliter d'Apache peut être multiple :

Reverse proxy
Site internet mutualisé

Si vous utilisez qu'un service Apache pour toutes vos instances, cela peut vite devenir compliqué. Lors du redémarrage, vous relancez toutes les connexions des différents Vhost mis en place
Les clients risques de ne pas apprecier
La solution est donc de mettre en place une instance par site, ce qui évitera tout problèmes lors du redémarrage

Voici la différence entre le monoservice et le multiservice

apache-1-service

Pré-requis


Il va vous falloir un pool d'IP interne, car il faudra attribuer une IP par service crée

Attention : les nouveaux services crées se basent sur le dossier d'apache d'origine /etc/apache2
les modifications effectuées sur apache2 seront implémentées sur le nouveau service
Pour cela il est préférable de ne pas toucher au dossier /etc/apache de base, celui-ci deviendra un template

Désactiver le service apache2

systemctl stop apache2
systemctl disable apache2

Cette extrait du fichier de création de nouveau service /usr/share/doc/apache2.2-common/examples/setup-instance atteste bien que le dossier d'apache2 est bien dupliqué

cp -a /etc/apache2 /etc/apache2-$SUFFIX

Gestion du pools d'IP


Concernant la mise en place et la gestion des IP, vous avez differentes façons de procéder

https://wiki.debian.org/fr/NetworkConfiguration

Mise en place


Création d'un nouveau service

    sh /usr/share/doc/apache2.2-common/examples/setup-instance NewService

Attention, le chemin peut varier suivant les OS. Dans debian 11, vous le trouverez : /usr/share/doc/apache2/examples/setup-instance

Newservice est à remplacer par le nom souhaitez

Newservice sera utilisé comme nom du service pour toute la documentation

Le service crée, modifier le fichier suivant :

    /etc/apache2-NewService/ports.conf

Remplacez

Listen 80/443

par

IPINTERFACESUP:80

IPINTERFACESUP est une IP (fixe de préférence) que vous avez définie pour votre nouveau service, chaque nouveau service aura une nouvelle IP

Listen 80

<IfModule ssl_module>
    Listen 443
</IfModule>

<IfModule mod_gnutls.c>
    Listen 443
</IfModule>

par

Listen IPINTERFACESUP:80

<IfModule ssl_module>
    Listen IPINTERFACESUP:443
</IfModule>

<IfModule mod_gnutls.c>
    Listen IPINTERFACESUP:443
</IfModule>

Redémarrer le service apache

systemctl restart apache2@NewService.service

Vérifiez que le service est en cours de fonctionnement

systemctl status apache2@NewService.service
netstat -ltpen | grep IPINTERFACESUP

Suppression d'un service


Il suffit d'utiliser le script que j'ai créé (qui est repris du script d'origine)

#!/bin/sh

if [ $# != 1 ] ; then
    echo usage: $0 '<suffix>'
    exit 1
fi

is_systemd () {
    case "$(readlink -f /proc/1/exe || true)" in
    *systemd*)
        return 0
        ;;
    *)
        return 1
        ;;
    esac
}

# the SUFFIX must not contain spaces or shell meta characters
SUFFIX=$1

if [ -e /etc/apache2-$SUFFIX ]
then
    echo "---------------------------Verification des fichier avant effacement"
    echo "------------------ /etc/apache-$SUFFIX ----------------" 
    ls -d /etc/apache2-$SUFFIX 2>/dev/null
    echo "------------------ /etc/init.d/apache-$SUFFIX ----------------" 
    ls /etc/init.d/apache2-$SUFFIX 2>/dev/null
    echo "------------------ /usr/local/sbin/ ----------------"
    ls /usr/local/sbin/*-$SUFFIX 2>/dev/null
    echo "------------------ /etc/logrotate.d/apache2-$SUFFIX ----------------" 
    ls /etc/logrotate.d/apache2-$SUFFIX 2>/dev/null
    echo "------------------ /var/log/apache2-$SUFFIX ----------------" 
    ls -d /var/log/apache2-$SUFFIX 2>/dev/null
    echo "------------------ /etc/default/apache-htcacheclean-$SUFFIX ----------------" 
    ls /etc/default/apache-htcacheclean-$SUFFIX 2>/dev/null
    echo "----------------------------- Fin de verification---------------------\n \n"

    echo "suppression de /etc/apache2-$SUFFIX"
    rm -rf /etc/apache2-$SUFFIX

    if is_systemd ; then
        echo "systemctl stop and disable apache2@$SUFFIX.service"
    systemctl stop apache2@$SUFFIX.service
    systemctl disable apache2@$SUFFIX.service
    else
        echo "stop et supression /etc/init.d/apache2-$SUFFIX ..."
        /etc/init.d/apache2-$SUFFIX stop
    rm /etc/init.d/apache2-$SUFFIX
    fi

    echo -n "supression des liens symbolique a2:" 
    for a in a2enmod a2dismod a2ensite a2dissite a2enconf a2disconf apache2ctl ; do
        echo -n " $a-$SUFFIX"
        rm -f /usr/local/sbin/$a-$SUFFIX
    done
    echo

    echo "Supression des fichier logrotate du service /etc/logrotate.d/apache2-$SUFFIX"
    rm -f /etc/logrotate.d/apache2-$SUFFIX
    rm -rf /var/log/apache2-$SUFFIX

    echo "Supression /etc/default/apache-htcacheclean-$SUFFIX"
    rm -f /etc/default/apache-htcacheclean-$SUFFIX

    echo "---------------------------Verification des fichiers effaces"
    echo "------------------ /etc/apache-$SUFFIX ----------------" 
    ls -d /etc/apache2-$SUFFIX 2>/dev/null
    echo "------------------ /etc/init.d/apache-$SUFFIX ----------------"
    ls /etc/init.d/apache2-$SUFFIX 2>/dev/null
    echo "------------------ /usr/local/sbin/ ----------------" 
    ls /usr/local/sbin/*-$SUFFIX 2>/dev/null
    echo "------------------ /etc/logrotate.d/apache2-$SUFFIX ----------------" 
    ls /etc/logrotate.d/apache2-$SUFFIX 2>/dev/null
    echo "------------------ /var/log/apache2-$SUFFIX ----------------" 
    ls -d /var/log/apache2-$SUFFIX 2>/dev/null
    echo "------------------ /etc/default/apache-htcacheclean-$SUFFIX ----------------" 
    ls /etc/default/apache-htcacheclean-$SUFFIX 2>/dev/null
else
    echo "ERROR: /etc/apache2-$SUFFIX Not-exist"
    exit 2
fi

Commandes utiles


Voici les outils pour les nouveaux services

a2enmod-Newservice
a2dismod-Newservice
a2ensite-Newservice
a2dissite-Newservice
a2enconf-Newservice
a2disconf-Newservice
apache2ctl-Newservice

Concernant systemd, il faudra ajouter un @NOMDUSERVICE.service

systemctl reload apache2@NewService.service