Nginx en reverse proxy de containers LXC

J'ai récemment installé un serveur de développement / intégration sur une machine dédiée SP 128 OVH assez "costaud" :

  • Intel(R) Xeon(R) CPU E5-1650 v2 @ 3.50GHz, 6 cores, 12 threads,
  • 128 Go de RAM,
  • 2 x 2 To de disque.

La machine est installée avec une distribution linux Ubuntu 14.04 LTS.

Afin de cloisonner les environnements, nous sommes partis sur des containers LXC, qui permettent une virtualisation d'application, plus légère à gérer que des "vraies VM" type KVM, Xen ou VMWare.

Dans cette configuration, chaque container a sa propre adresse IP, servie par un serveur DHCP interne, mais non accessible via internet (il s'agit d'adresse privées).

Pour accéder au serveur http, il est donc nécessaire de passer par un reverse proxy, qui fait "passe-plat" vers le container cible.

Nous avons utilisé nginx en frontal, plutôt que apache, pour sa légéreté et sa rapidité.
L'arborescence nginx est la suivante :

# tree nginx
nginx
├── conf.d
├── fastcgi_params
├── includes
│   └── proxy.inc
├── koi-utf
├── koi-win
├── mime.types
├── naxsi_core.rules
├── naxsi.rules
├── naxsi-ui.conf.1.4.1
├── nginx.conf
├── proxy_params
├── scgi_params
├── sites-available
│   ├── default
│   ├── munin
│   └── proxy
├── sites-enabled
│   ├── default -> /etc/nginx/sites-available/default
│   └── proxy -> /etc/nginx/sites-available/proxy
├── uwsgi_params
└── win-utf

Nous avons ajouté un répertoire includes qui contient les fichiers communs de configuration.

Le paramétrage des proxy est fait dans le fichier /etc/nginx/sites-available/proxy :

# Fichier de configuration pour le reverse proxy
# ========== Developpement ============
# Premier serveur de dev
server {
  server_name dev.mydomain.com ;
  location / {
    proxy_pass http://10.0.3.21/ ;
    include includes/proxy.inc ;
  }
}
# Deuxieme server de Dev
server {
  server_name dev2.mydomain.com ;
  location / {
    proxy_pass http://10.0.3.24/ ;
    include includes/proxy.inc ;
  }
}

# Serveur Integration
server {
  server_name integ.mydomain.com ;
  location / {
    proxy_pass http://10.0.3.28/ ;
    include includes/proxy.inc ;
  }
}

# Serveur Recette
server {
  server_name recette.mydomain.com ;
  location / {
    proxy_pass http://10.0.3.32/ ;
    include includes/proxy.inc ;
  }
}

Le fichier /etc/nginx/includes/proxy.inc contient les lignes communes à tous les hosts virtuels :

  proxy_redirect off;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-Host $host;
  proxy_set_header X-Forwarded-Server $host;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

Le paramétrage est activé via un lien symbolique et le rechargement de nginx :

ln -s /etc/nginx/sites-available/proxy /etc/nginx/sites-enables/proxy
service nginx reload


 

Catégorie
Tag