Installation et configuration d’un reverse proxy avec NginX

De HomeServer.DIY.
Aller à : Navigation, rechercher

Lorsque l’on héberge plusieurs services web sur un serveur, il est parfois difficile de se souvenir des différentes url. Surtout lorsque ceux-ci utilisent des ports différents comme webmin, subsonic et d’autres. En tant qu’administrateur de votre serveur domestique, cela pose surement moins de soucis pour vous que pour votre entourage utilisant vos services. Pour leur simplifier la vie, il est tout à fait possible d’utiliser un reverse proxy, ou proxy inverse pour traduire de simples requêtes vers un sous domaine classique, et les rediriger vers le service web adéquat. Vous aimeriez accéder à votre service de streaming audio via l’url http://musique.nomdedomaine.com ? Vous aimeriez passer outre certains bloquages de ports lorsque vous vous connectez via un réseau mobile ou un hotspot wifi ?

Suivez le guide, Nginx va devenir votre ami !

Sommaire

Installation

Commençons pas installer NginX sur notre serveur:

Ouvrez une console et tapez:

user@computer:$ aptitude install nginx

Configuration du proxy

Ensuite nous allons créer et remplir le fichier proxy.conf. Pour cela j’utiliserai l’éditeur nano. Si vous souhaitez utiliser un autre éditeur il vous suffira d’adapter les commandes. Si nano n’est pas installé sur votre serveur et que vous souhaitez l’utiliser il suffira de faire:

user@computer:$ aptitude install nano

Créons donc le fichier de configuration du proxy:

user@computer:$ nano /etc/nginx/conf.d/proxy.conf

Entrez le texte suivant:

proxy_redirect          off;
proxy_set_header        Host            $host;
proxy_set_header        X-Real-IP       $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size    10m;
client_body_buffer_size 128k;
client_header_buffer_size 64k;
proxy_connect_timeout   90;
proxy_send_timeout      90;
proxy_read_timeout      90;
proxy_buffer_size   16k;
proxy_buffers       32   16k;
proxy_busy_buffers_size 64k;

Tapez Crtl-x afin de sauvegarder et confirmez.

Comme d’habitude je ne rentre pas dans les détails de ce fichier de configuration du proxy. J’avoue ne pas m’être trop pencher dessus. Le but est d’avoir des redirections permettant de se connecter à vos services web sans passer par un port particulier.

Mise en place des règles du proxy et exemples

Maintenant, que votre proxy est prêt à fonctionner, il faut expliquer à NginX comment réagir aux requêtes qu’il recevra. Pour cela, il faut lui donner les règles de redirection. Tout se passe dans le fichier /etc/nginx/sites-enabled/default.

Pour l’éditer en console, ici encore on utilise nano:

user@computer:$ nano /etc/nginx/sites-enabled/default

Personnellement j’ai préféré effacer tout le contenu de ce fichier pour partir sur quelque chose de clair. J’ai aussi séparé mes règles par une ligne composée de « # », puis par une autre autre commençant par « # » et suivie d’une petite phrase me rappelant le but de cette règle. Le symbole « # » sert à commenter le ligne. C’est à dire que cette ligne ne sera pas prise en compte par le logiciel que l’on configure. C’est très pratique lorsque l’on revient plusieurs semaines plus tard sur un fichier afin de voir à quoi correspond chaque règle. Mais revenons à nos moutons.

Le fichier est donc vide. NginX prenant en compte les règles dans l’ordre, il faut commencer par lui dire que toutes les requêtes pour un domaine donné arrivant par un port donné doivent être renvoyées vers le serveur web:

server {
        listen   80;
        server_name     tom23.com;
        location / {
                proxy_pass         http://192.168.2.56/;
        }
}

Voici cette première règle. Pour faire simple, on demande à NginX d’écouter le port 80 et de rediriger les requêtes pour le domaine tom23.com vers le serveur web situé sur l’ip 192.168.2.56 du réseau local. Si votre serveur web est situé sur la même machine, il suffit de mettre http://127.0.0.1/

Ensuite pour rediriger une requête faite sur le port 80 via un sous domaine comme musique.tom23.com vers votre serveur de streaming audio sur le port 4040 il suffit d’entrer à la suite la règle suivante:

server {
        listen   80;
        server_name     musique.tom23.com;
        location / {
                proxy_pass         http://192.168.2.56:4040/; 

        }
}

Ensuite passons à un exemple de configuration qui permettra de joindre votre page subsonic via le port 80 sans modifier la configuration de votre serveur de streaming audio.

Ce genre de configuration fonctionne aussi très bien pour un accès webmin vers le port 10000 par exemple.

Dans mon cas, j’ai installé NginX sur un DockStar qui prendra en charge ces redirections. Il m’a juste suffit de rediriger le port 80 de mon routeur vers le dockstar au lieu de mon serveur web.

Si vous utilisez NginX en tant que reverse proxy sur la même machine que votre serveur web habituel, pensez à configurer ce dernier pour écouter un port différent, comme le 8080 par exemple. Dans ce cas, pensez aussi à bien écrire la première règle de redirection en envoyant les requêtes vers la machine elle même sur le port 8080 de cette façon:

server {
       listen   80;
       server_name     tom23.com;
       location / {
               proxy_pass         http://127.0.0.1:8080/;
       }
}

Faire fonctionner NginX avec Apache 2

Si vous utilisez apache comme serveur web et que vous voulez qu’il logue correctement les IPs qui se connectent à votre serveur, il faut installer le module suivant sur la machine le faisant tourner:

user@computer:$ apt-get install libapache2-mod-rpaf

Une fois que tout ceci est fait, redémarrez NginX et votre serveur web via une commande restart.

Si votre serveur apache n'est pas sur la même machine que votre reverse proxy, il est nécessaire de préciser l'adresse IP du serveur NginX dans le fichier rpaf.conf sur votre serveur apache2.

Pour cela éditez le via:

user@computer:$ nano /etc/apache2/mods-enabled/rpaf.conf

A la ligne RPAFproxy_ips changez l'adresse locale (127.0.0.1) par l'adresse ip du reverse proxy qui doit être sous la forme 192.168.x.x. Si vous disposez de plusieurs serveurs ayant cette fonction, ajoutez toutes les adresses ip en les séparant par un espace.

Augmenter la taille des urls redirigables par NginX

Il peut arriver que les urls que l'on entre dans le fichier de configuration de NginX soient trop longues. Dans ce cas, le message suivant vous est retourné:

could not build the server_names_hash, you should increase server_names_hash_bucket_size

Pour éviter ça, il suffit d'éditer le fichier /etc/nginx/nginx.conf, et d'y ajouter "server_names_hash_bucket_size 64;" dans la partie http:

http {
   server_names_hash_bucket_size 64;
   ...
}

Il suffit ensuite de redémarrer NginX pour que la modif soit prise en compte.

Précisions

Sachez que NginX est très performant pour répondre aux requêtes sur le contenu statique des pages web, comme les images, les css etc. bien plus qu’apache 2. De ce fait, il est très intéressant de s’en servir de façon complémentaire afin qu’il les mette en cache et accélère donc leur envoi. Je ne suis pas sur que ce soit pertinent dans le cas d’un server@home du fait qu’il y a peu de chance que ce soit votre serveur web qui ralentisse les requêtes. Il y a plus de chances que ce soit votre débit d’upload si vous êtes derrière une ligne ADSL.