HA Proxy + et multiples serveurs http sur le port 80

Aujourd’hui j’ai une IP publique et je souhaite avoir prochainement des sites webs qui tournent sur des serveurs différents.
La solution, mettre HAProxy en front est dispatcher les requêtes qui arrivent sur le port 80, vers le bon serveur en fonction du nom de domaine demandé.

Donc j’arrête mon serveur Apache (J’aurai juré l’avoir remplacé par Lighttpd !)…

apache2ctl stop

… et je le reconfigure pour qu’il écoute sur le port 8080 en modifiant le fichier « ports.conf »

Listen 8080

… puis je reconfigure mes vhosts…

<VirtualHost *:8080>

… pour finalement le redémarrer…

apache2ctl configtest
apache2ctl restart

… « restart » c’est le mal (!) … « graceful » c’est le bien !
… et vérifie qu’il tourne bien sur le port 8080.

nmap 127.0.0.1
ORT     STATE SERVICE
...
...
8080/tcp open  http-proxy
...
...

Jusqu’ici tout va bien, mais nos sites sont inaccessibles !

Donc étape 2, on installe HAProxy par un petit…

apt-get install haproxy

… puis on l’active au démarrage de la machine en éditant le fichier « /etc/default/haproxy » en y ajoutant…

ENABLED = 1

…puis on le configure au travers du fichier « /etc/haproxy/haproxy.cfg » pour rediriger toutes les requêtes du port 80 vers le port 8080

...
...
# ============
# --- HTTP ---
# ============

listen FRONTEND_HTTP 192.168.1.11:80
        mode http
        log global
        option  httplog
        stats enable
        stats auth XXXXXXXXXX:XXXXXXXXXX
        balance roundrobin
        option httpclose
        option forwardfor
        option httpchk HEAD /check.txt HTTP/1.0
        capture request header Host len 20

        default_backend BACKEND_HTTP1

# ================
# --- BACKENDS ---
# ================

backend BACKEND_HTTP1
        cookie SERVERID insert indirect nocache
        server TB_001 127.0.0.11:8080 cookie tb001 weight 100 maxconn 100 check

…on crée le fichier « check.txt », avec n’importe quel contenu, à la racine de notre serveur web et on (re)démarre…

service haproxy restart

…et comme tout s’est magnifiquement bien passé, tous nos sites sont maintenant revenus en ligne ;)

Superbe tout ça … mais on a absolument pas avancé par rapport au titre de cette article !
Donc … à suivre…

Les logs HAProxy
Si celle-ci ne sont pas disponibles, vérifiez le contenu du fichier « /etc/rsyslog.d/49-haproxy.conf »

# Create an additional socket in haproxy's chroot in order to allow logging via
# /dev/log to chroot'ed HAProxy processes
$AddUnixListenSocket /var/lib/haproxy/dev/log

# Send HAProxy messages to a dedicated logfile
if $programname startswith 'haproxy' then /var/log/haproxy.log
&~

De mon côté j’ai du faire un…

rsyslog service restart

… pour que le fichier soit créé ;)

Magento 2: Fichiers JS, CSS et images manquants

Comme vous pouvez le voir sur cette capture d’écran, après une installation toute fraiche de Magento 2.1.5, une partie des fichiers javascript, css et des images sont manquants !
magento-missing-files
En inspectant la page il est aisé de voir que ces ressources sont chargées à partir du dossier…

/pub/static/frontend/Magento/luma/en_GB/

… qui n’existe pas sur ma machine.
Soit dit en passant ce fameux sous-dossier « en_GB » correspond à la locale que j’ai choisie lors de l’installation.

Après quelques recherches j’en ai conclu qu’il s’agissait là d’un problème de contenu statique non déployé.

Ni une ni deux, j’ai dégainé un script bash pour éviter d’avoir (éventuellement) à ressaisir 3 lignes de code !!!

#!/bin/bash
./chmod.sh
rm -fr pub/static/*
php bin/magento setup:static-content:deploy en_US en_GB
./chmod.sh

et de suite c’est beaucoup mieux…

magento-missing-files.2

Pour le contenu du script « ./chmod.sh » je vous renvoie à l’article précédent

Ha la la Magento … toujours des petites tracasseries lors de l’installation !

Installation de Magento 2 et page blanche !

Après avoir suivi la procédure « easy install » de Magento 2, je me suis retrouvé face à un écran entièrement vide.
Faut croire que j’ai survolé les différentes étapes !

Un simple chown et quelques chmod exécutés à partir du dossier magento suffisent à résoudre le problème…

sudo chown `whoami`:`whoami` ./*
sudo chmod -R 777 app/etc
sudo chmod -R 777 var
sudo chmod -R 777 pub/media
sudo chmod -R 777 pub/static

Lighttpd: sites availables et sites enabled

Un rapide tuto pour reproduire le fonctionnement des dossiers « sites-available » et « sites-enabled » d’Apache sous Lighttpd.
Cela fait des années maintenant que j’utilise cette technique sans jamais l’avoir couchée par écrit.

On commence par créer les dossiers…

mkdir /etc/lighttpd/sites-available
mkdir /etc/lighttpd/sites-enabled 

On ajoute la ligne suivante à la fin du fichier de configuration « /etc/lighttpd/lighttpd.conf » :

Sous Debian 9:

include_shell conf_dir + "/include-sites-enabled.pl"

Sous Ubuntu 16.04:

include_shell "/usr/share/lighttpd/include-sites-enabled.pl"

On se place dans le dossier équivalent au contenu de la variable « conf_dir » sous Debian, ou dans le dossier « /usr/share/lighttpd » sous Ubuntu.
On crée le script « include-sites-enabled.pl » avec le contenu suivant…

#!/usr/bin/perl -wl

use strict;
use File::Glob ':glob';

my $confdir = shift || "/etc/lighttpd/";
my $enabled = "sites-enabled/*.conf";

chdir($confdir);
my @files = bsd_glob($enabled);

for my $file (@files)
{
        print "include \"$file\"";
}

On teste la configuration…

lighttpd -t -f /etc/lighttpd/lighttpd.conf

… qui doit donner comme résultât « Syntax Ok » avant de pouvoir redémarrer le serveur avec…

service lighttpd restart

Comment ajouter un vhost et l’activer ?

Créez dans le dossier « /etc/lighttpd/sites-available » votre fichier de vhost avec comme extension « .conf ».
Depuis le dossier « /etc/lightppd/sites-enabled » créez un alias vers votre fichier.
Exemple…

ln -s ../sites-available/mon_vhost.conf

Il ne reste plus qu’à tester la configuration avant de redémarrer le serveur…

lighttpd -t -f /etc/lighttpd/lighttpd.conf
service lighttpd restart