Retour au Sommaire
Trois services web sur un seul serveur avec HAProxy
Apache, c'est super. Les services NodeJS aussi, ou bien en GoLang, tant qu'on y est. Mais tout ce petit monde ne peut pas naturellement cohabiter sur le port 80, à moins de passer par un proxy qui traduira des (sous-)domaines différents en autant de ports locaux (pas le port 80, réservé au proxy). C'est ce que nous allons faire ici avec HAProxy. Apache en 8080 pour tous les domaines par défaut, Go en 8081 sur le domaine golang.domaine.com et NodeJS en 8082 sur le domaine nodejs.domaine.com, par exemple.
CHAPTER:Reconfiguration d'Apache:CHAPTER
Supposons que Apache est déjà classiquement installé sur le port 80 (valeur par défaut), comme on peut le vérifier aisément dans '/etc/apache2/ports.conf':
CODE:
NameVirtualHost *:80
Listen 80
:CODE
Changez-les par:
CODE:
NameVirtualHost *:8080
Listen 8080
:CODE
Puis relancez Apache:
CMD:
service apache2 restart
:CMD
CHAPTER:Installation de HAProxy:CHAPTER
L'installation dépendra de votre distribution, par exemple:
Pour la Debian Wheezy
CMD:
echo "deb http://httpredir.debian.org/debian wheezy-backports main" >> /etc/apt/sources.list.d/backports.list
apt-get update
apt-get install -t wheezy-backports haproxy
:CMD
Pour la Debian Jessie
CMD:
echo "deb http://httpredir.debian.org/debian jessie-backports main" >> /etc/apt/sources.list.d/backports.list
apt-get update
apt-get install -t jessie-backports haproxy
:CMD
Pour Ubuntu 16.04 (LTS)
CMD:
apt-get install haproxy
:CMD
CHAPTER:Configuration de HAProxy:CHAPTER
Remplacez simplement le contenu du fichier '/etc/haproxy/haproxy.cfg' par:
CODE:
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
# Default ciphers to use on SSL-enabled listening sockets.
# For more information, see ciphers(1SSL).
ssl-default-bind-ciphers kEECDH+aRSA+AES:kRSA+AES:+AES256:RC4-SHA:!kEDH:!LOW:!EXP:!MD5:!aNULL:!eNULL
ssl-default-bind-options no-sslv3
defaults
log global
frontend http-in
mode http
bind *:80
timeout client 86400000
default_backend www_backend
acl acl_golang hdr_end(host) -i golang.domaine.com
acl acl_nodejs hdr_end(host) -i nodejs.domaine.com
use_backend golang_backend if acl_golang
use_backend nodejs_backend if acl_nodejs
backend www_backend
mode http
timeout server 86400000
timeout connect 5000
server www localhost:8080
backend golang_backend
mode http
timeout server 86400000
timeout connect 5000
server gotracker localhost:8081
backend nodejs_backend
mode http
timeout server 86400000
timeout connect 5000
server gotracker localhost:8082
:CODE
Prenez le temps de lire et essayer de comprendre le contenu de ce fichier de configuration, c'est assez facile à lire.
Enfin on relance HAProxy, pour valider les modifications:
CMD:
/etc/init.d/haproxy restart
:CMD
Attention, pour ce qui est d'Apache, à ne pas oublier de changer les VHosts pour refléter le changement de port, comme ci-dessous:
CODE:
DocumentRoot /var/www/whatever
ServerName whatever.domain.tld
:CODE
Puis
CMD:
service apache2 reload
:CMD
C'est tout, à partir de maintenant golang.domaine.com est géré par le service en GoLang, nodejs.domaine.com par le service en NodeJS, et tous les autres domaines par Apache, et tout ça sur le port 80, bien entendu.