+------------------+
|  Utilisateurs    |
+---------+--------+
          |
          v                            

+---------+-------------+
| Nginx (proxy inverse) |
+---------+-------------+
          |
          v                            
+---------------------------------+
|  Apache + (PHP / FastCGI)       |
+---------+-----------------------+

Notre site nomdedomaine.fr repose sur Apache ; nous allons y ajouter Nginx en tant que proxy inverse.

  1. 1re étape : configurer Apache sur le port 8080
  2. 2e étape : installer Nginx

Configurer Apache sur le port 8080

sudo apt update
sudo systemctl stop apache2

sudo cp /etc/apache2/ports.conf /etc/apache2/ports.conf.bak
sudo nano /etc/apache2/ports.conf
Listen 127.0.0.1:8080

sudo a2dissite 000-default.conf
sudo a2dissite default-ssl.conf
sudo a2dissite nomdedomaine.conf
...

cd /etc/apache2/sites-available
sudo cp default-ssl.conf default-inverse.conf

sudo nano default-inverse.conf
<VirtualHost 127.0.0.1:8080>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    # Autres directives...
#   Commenter ou supprimer les lignes
#     SSLEngine on
#     SSLCertificateFile /etc/letsencrypt/live/nomdedomaine/fullchain.pem
#     SSLCertificateKeyFile /etc/letsencrypt/live/nomdedomaine/privkey.pem

SSLEngine off
</VirtualHost>
sudo apachectl configtest
sudo systemctl start apache2
sudo systemctl stop apache2
sudo systemctl restart apache2

# Le cache de votre navigateur peut vous jouer des tours !!

curl -I http://nomdedomaine/index.nginx-debian.html

Installer Nginx et configurer le proxy inverse

sudo apt install nginx -y

curl -I http://monserveur/index.html
curl -I http://monserveur/index.nginx-debian.html

# installer le proxy inverse, la redirection de port

cd /etc/nginx/sites-available/
sudo cp default default.bak
sudo nano default
server {
        listen 80 default_server;
        listen [::]:80 default_server;

    location / {
        proxy_pass http://127.0.0.1:8080;  # Changez le port si nécessaire
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_read_timeout 60s;
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
    }
}

Le certificat nomdedomaine existe déjà. Veillez à remplacer default_server par le nom de domaine ou l'adresse correspondante.

sudo nano /etc/nginx/sites-available/default
sudo nginx -t
sudo systemctl restart nginx
server {
    listen 80;
    server_name nomdedomaine;

    server_tokens off;

    # Rediriger les requêtes HTTP vers HTTPS
    location / {
        return 301 https://$host$request_uri;
    }
}

server {
    listen 443 ssl http2;
    server_name nomdedomaine;

    server_tokens off;

    ssl_certificate /etc/letsencrypt/live/nomdedomaine/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/nomdedomaine/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_read_timeout 60s;
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;        
    }
}
sudo nginx -t
sudo systemctl restart nginx

HTTP/2

L'activation de HTTP/2 sur Nginx peut améliorer les performances côté client, notamment lorsque le serveur doit gérer de nombreuses requêtes parallèles. Si Nginx termine déjà le HTTPS en frontal devant Apache, activer HTTP/2 sur Apache n'apporte pas de bénéfice aux visiteurs, car la liaison Nginx → Apache reste généralement en HTTP/1.1 en local.

Côté Nginx :

    server {
    listen 443 ssl http2;
    server_name nomdedomaine;
    ......
sudo nginx -t
sudo systemctl restart nginx

Côté Apache :

<VirtualHost *:443>
    Protocols h2 http/1.1
    ServerName exemple.com

    SSLEngine on
     SSLCertificateFile /chemin/vers/vot........
sudo apachectl configtest
sudo systemctl restart apache2