Archives quotidiennes :

Reverse proxy avec Apache

Après Nginx voici un autre exemple de reverse proxy, cette fois-ci nous utiliserons Apache avec Redmine.

Si vous utilisez un serveur avec Redmine, voici l’url d’accès à l’application :

http://redmine.myserver.com:3000

De même que pour l’exemple de Kibana, cette URL n’est ni pratique ni jolie, ni même utilisable à travers certains réseaux qui limitent l’utilisation de certains port. Cela donne un avantage de plus quand à l’utilisation d’un reverse proxy.

Nous commençons par installer apache :

httpd_logo_wide_new

Sous Gentoo (en ayant ajouter les variables USE proxy et proxy_http :

# emerge -avq apache

Sous Debian :

# apt-get install apache2

Nous configurons ensuite le vhost correspondant à Redmine et dans le bloc <VirtualHost *:80> nous ajoutons ces lignes :

ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/

ProxyPass permet d’indiquer que nous relayons les requêtes envoyées sur la racine vers notre Redmine sur le port 3000.

ProxyPassReverse permet de retransmettre les informations entre les deux parties.Voilà, votre Redmine est joignable directement sur une URL sur le port 80 :

http://redmine.myserver.com

Reverse proxy avec Nginx

Tout d’abord, voici une petite explication de l’utilité de mettre en place un reverse proxy. Nous allons prendre ici l’exemple d’un serveur disposant du groupe ELK (Elasticsearch  Logstash Kibana) avec l’interface web de Kibana qui écoute par défaut sur le port 5601. Pour y accéder vous devez passer par cette URL :

http://myelk.myserver.com:5601/

Cela oblige à ouvrir le port vers l’extérieur et ce n’est pas très joli à écrire.

Voici comment utiliser Nginx comme reverse proxy pour obtenir une url sans port à spécifier et même permettre de mettre en place une authentification simple par .htaccess.

nginx

Tout d’abord, installer Nginx ( http://nginx.org/ ) sous Debian :

# apt-get install nginx

Allons ensuite configurer le reverse proxy dans le fichier de base d’un nginx fraichement installé :

# vim /etc/nginx/sites-available/default

Voici le bloc à modifier dans ce vhost :

location / {
                proxy_pass http://localhost:5601;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection 'upgrade';
                proxy_set_header Host $host;
                proxy_cache_bypass $http_upgrade;
 }

Petite explication de ces lignes :

Nous indiquons à proxy_pass l’url vers laquelle on souhaite envoyer les requêtes, soit Kibana pour notre exemple. proxy_http_version indique la version du protocole HTTP à utiliser et les proxy_set_header permettent de faire suivres des informations dans les en-têtes.

Petit plus, vous pouvez ajouter un .htaccess via ces deux lignes à placer avant location / :

auth_basic "Access restreint";
auth_basic_user_file /etc/nginx/htpasswd;

Et sans oublier d’inscrire des utilisateurs dans ce fichier (la commande htpasswd est obtenu grace au paquet apache2-utils ):

htpasswd -c /etc/nginx/htpasswd my-user