1. Installation de Nginx¶
1.1 Installation¶
sudo apt update && sudo apt install nginx -y
Vérifier le service :
systemctl status nginx
Activer au démarrage si besoin :
sudo systemctl enable nginx
1.2 Organisation des vhosts¶
Nginx utilise :
/etc/nginx/sites-available/pour les fichiers de config “déclarés”/etc/nginx/sites-enabled/pour les sites “activés” via symlinknginx -tpour valider la config, puissystemctl reload nginx
2. Certificats avec Certbot (Let’s Encrypt)¶
2.1 Pré‑requis¶
- DNS du domaine → IP publique de ton serveur
- Un vhost HTTP simple avec
server_namecorrect.
Exemple HTTP pour example.com :
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
2.2 Installation de Certbot¶
sudo apt install certbot python3-certbot-nginx -y
2.3 Obtention du certificat + config auto Nginx¶
sudo certbot --nginx -d example.com -d www.example.com
Certbot :
- obtient le certificat
- ajoute un bloc
listen 443 ssl;avecssl_certificateetssl_certificate_key - peut configurer la redirection HTTP → HTTPS si tu choisis cette option.
Test du renouvellement :
sudo certbot renew --dry-run
3. Certificats self‑signed¶
3.1 Génération du certificat¶
sudo mkdir -p /etc/nginx/ssl
puis,
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/example.key -out /etc/nginx/ssl/example.crt
Enfin, remplir les informations suivantes (optionnel mais recommandé) :
- Country Name : ex. FR
- State or Province : ex. France
- Locality Name : ex. Limoges
- Organization Name : ex. DReynaud
- Organizational Unit : ex. Development
- Common Name (FQDN) : ex. example.com
- Email Address : ex. dev@example.com
3.2 Vhost HTTPS avec self‑signed¶
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name dev.local;
root /var/www/dev/html;
index index.html;
ssl_certificate /etc/nginx/ssl/example.crt;
ssl_certificate_key /etc/nginx/ssl/example.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
try_files $uri $uri/ =404;
}
}
Redirection HTTP → HTTPS :
server {
listen 80;
listen [::]:80;
server_name dev.local;
return 301 https://$host$request_uri;
}
Les navigateurs afficheront un avertissement (Autorité de Certification non reconnue), normal pour de l'auto-signé.
4. Activer le HTTPS (générique)¶
Pour n’importe quel site :
- Avoir un bloc HTTP :
nginx
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
- Avoir un bloc HTTPS :
```nginx server { listen 443 ssl; listen [::]:443 ssl; http2 on;
server_name example.com;
root /var/www/example.com/html;
index index.html;
ssl_certificate /chemin/vers/fullchain.pem;
ssl_certificate_key /chemin/vers/privkey.pem;
location / {
try_files $uri $uri/ =404;
}
} ```
- Vérifier et recharger :
bash
sudo nginx -t
sudo systemctl reload nginx
5. Héberger plusieurs sites sur le même serveur¶
5.1 Arborescence¶
Exemple pour 3 sites :
sudo mkdir -p /var/www/site1/html
sudo mkdir -p /var/www/site2/html
sudo mkdir -p /var/www/site3/html
sudo chown -R $USER:$USER /var/www/site{1,2,3}/html
Mettre un index.html différent dans chaque dossier.
5.2 Vhosts HTTP + HTTPS par domaine¶
Il est possible d'avoir un seul fichier de configuration pour tous les sites, ou un fichier par site.
# Site 1
server {
listen 80;
server_name site1.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name site1.example.com;
root /var/www/site1/html;
index index.html;
ssl_certificate /etc/letsencrypt/live/site1.example.com/cert.crt;
ssl_certificate_key /etc/letsencrypt/live/site1.example.com/cert.key;
location / {
try_files $uri $uri/ =404;
}
}
# Site 2
server {
listen 80;
server_name site2.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name site2.example.com;
root /var/www/site2/html;
index index.html;
ssl_certificate /etc/letsencrypt/live/site2.example.com/cert.crt;
ssl_certificate_key /etc/letsencrypt/live/site2.example.com/cert.key;
location / {
try_files $uri $uri/ =404;
}
}
- Un
server_nameprécis par domaine. - Un bloc HTTP (80) + un bloc HTTPS (443) pour chaque site.
- Symlinks dans
sites-enabledsi tu sépares les fichiers.