+------------------+
| 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.
- 1re étape : configurer Apache sur le port 8080
- 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