LXC: routing HTTP avec nginx

J’utilise LXC pour, entre autre choses, isoler des applications web en hébergeant un site par container. Pour que ces sites soient accessibles de l’extérieur, il faut mettre en place sur l’hôte un reverse proxy. Voici une procédure simple pour utiliser nginx en reverse proxy.

Pourquoi nginx ?

Nginx est un serveur web / reverse – proxy que j’utilise régulièrement. Il est légé, rapide et relativement rapide et simple à configurer.

La configuration

Le serveur hôte que j’utilises tourne sous Ubuntu, je ne détail pas ici la mise en place des containers LXC qui a été traitée dans un précédent billet. Pour installer Nginx:

sudo apt-get install nginx

La configuration de base se résume à créer un serveur qui enverra sur le container, identifié par son adresse Ip, se qu’il recevra sur un nom de domaine. Pour obtenir les adresses Ip des containers démarrés :

$ cat /var/lib/misc/dnsmasq.leases 
1413406911 00:16:3e:ff:86:80 10.0.3.149 geodjango *

La dernière étape est la création du vhost en éditant le fichier /etc/nginx/sites-enabled/default. Vous pouvez supprimer tout le contenu du fichier par défaut, et pour chaque container qui doit être accessible ajouter

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://10.0.3.149:8000;
    }
}

listen et server_name sont le port et le nom de domaine depuis lesquels le container sera accessible de l’exterieur. proxy_set_header permet d’ajouter des headers supplentaire à la requête pour, par exemple, donner des information sur son origine. proxy_pass est la destination de la requête, ici le container fait tourner une appli django sur le port 8000.

Il reste à redémarer nginx

sudo service nginx start

Ou a recharger la config si il était déjà lancé

sudo service nginx reload

example.com redirige maintenant sur le port 8000 du container à l’IP 10.0.3.149.

About the Author: Guillaume Luchet

Guillaume Luchet est Directeur de la R&D et Lead Développeur chez Bilendi Technology, entrepreneur et développeur freelance.