NginX en reverse proxy avec Apache HTTPD

Reverse proxy nginx avec apache httpd

Reverse proxy NGINX avec Apache HTTPD

Faire un reverse proxy avec NGINX et Apache HTTPD en quelques minutes et avec support HTTPS.

Sous Centos 7, Apache HTTPD ne bénéficie toujours pas de mod_http2. Or ce protocole sorti depuis quelques années maintenant permet de grandement améliorer les performances web. Nginx proposant ce support, monter une architecture toute simple avec nginx en front et Apache HTTPD en back est une solution qu’énormément de webmasters ont choisi.

Installer nginx et httpd

yum install nginx httpd
systemctl stop httpd # si vous l'aviez déjà installé
systemctl start nginx

Par défaut vous ne devriez rien avoir à configurer, nginx se lance sur le port 80.

Serveur web nginx

Page d’accueil du serveur web NGINX

Désactiver mod_ssl sur httpd

Si jamais vous aviez déjà un serveur web Apache HTTPD, il se pourrait que votre conf SSL soit activée. Si jamais il faut la désactiver pour éviter des conflits sur le port 443 qu’nginx va utiliser.

mv -v /etc/httpd/conf.d/ssl.conf{,.disabled}

Faire écouter httpd sur le port 8080

On change le port par défaut d’écoute du serveur web httpd de 80 vers 8080.

Listen 8080

Pour trouver toutes les lignes de conf avec Listen, utilisez cette commande. Il faut éviter que NGINX et Apache HTTPD écoute sur le même port.

grep -rni 'Listen' /etc/httpd/

Pensez à redémarrer httpd.

systemctl restart httpd

Dans l’idée, voici qui écoute sur quel port :

  • 80 : nginx
  • 8080 : httpd (apache)
  • 443 : nginx

Reverse proxy nginx vers httpd

Httpd écoute désormais sur le port 8080, nginx sur le port 80. La ligne suivante permet de faire un proxy entre le port 80 et le port 8080.

location / {
proxy_pass http://localhost:8080;
}

Voici ma configuration SSL entièrement chargée.

vim /etc/nginx/conf.d/site-1.conf

On utilise simplement proxy_pass. J’ai généré un certificat SSL gratuit avec Let’s Encrypt pour avoir le HTTPS.

    server {
        listen       443 ssl http2 default_server;
        listen       [::]:443 ssl http2 default_server;
        server_name  site-1.com;

        ssl_certificate "/etc/letsencrypt/live/site-1.com/cert.pem";
        ssl_certificate_key "/etc/letsencrypt/live/site-1.com/privkey.pem";
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
                proxy_pass http://localhost:8080;
        }
    }

Ceci est juste un exemple très basique de ce que l’on peut faire avec le reverse proxy NGINX. La documentation permet de configurer un peu plus le pont entre nginx et httpd notamment grace à proxy_set_header.

Tester que la configuration reverse proxy est correcte

Dans les entêtes de la réponse http sur / (voir capture d’écran tout en haut). En bas à droite on peut voir qu’nginx sert la requête :

server: nginx/1.12.2

Si jamais vous avez du mal à voir les infos, peut-être que le pont entre le port 80/443 -> 8080 n’est pas bon. Sur votre serveur, vous pouvez tenter de débogguer avec une simplement commande CURL.

curl http://localhost:8080 &> /dev/stdout

Si jamais vous souhaitez voir quel processus écoute sur quel port :

netstat -tulp
Connexions Internet actives (seulement serveurs)
Proto Recv-Q Send-Q Adresse locale Adresse distante Etat PID/Program name
tcp 0 0 0.0.0.0:https 0.0.0.0:* LISTEN 10034/nginx: master
tcp 0 0 0.0.0.0:mysql 0.0.0.0:* LISTEN 909/mysqld
tcp 0 0 0.0.0.0:http 0.0.0.0:* LISTEN 10034/nginx: master
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN 668/sshd
tcp6 0 0 [::]:https [::]:* LISTEN 10034/nginx: master
tcp6 0 0 [::]:http [::]:* LISTEN 10034/nginx: master
tcp6 0 0 [::]:webcache [::]:* LISTEN 9697/httpd
tcp6 0 0 [::]:ssh [::]:* LISTEN 668/sshd

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.