nginx ou nginx Proxy Manager
J’ai tenté d’installer nginx. J’y suis bien arrivé. C’est simple et facile. ** A condition que votre port 80/443 ne soit pas déjà utilisé par un autre service**
Sauf que … je souhaitais une interface graphique (parce que, même si je suis Geek, je me connais : je ne le suis que par phase).
Donc j’ai repéré nginx Proxy Manager (NPM de son petit nom à ne pas confondre avec NPM, le gestionnaire de paquets Node.js). Pour cela, il faut Docker. La méthode proposée est la suivante :
- Créer un folder /opt/stacks/nginxproxymanager
- Rentrer dedans (avec
cd) - Créer *compose.yml avec le contenu suivant :
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
# These ports are in format <host-port>:<container-port>
- '80:80' # Public HTTP Port
- '443:443' # Public HTTPS Port
- '81:81' # Admin Web Port
# Add any other Stream port you want to expose
# - '21:21' # FTP
#environment:
# Uncomment this if you want to change the location of
# the SQLite DB file within the container
# DB_SQLITE_FILE: "/data/database.sqlite"
# Uncomment this if IPv6 is not enabled on your host
# DISABLE_IPV6: 'true'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
-
Lancer le compose :
docker compose up -dIl se peut que nginx Proxy Manager ne se lance pas car quelqu’un occupe déjà certains ports (80 ou 443). Modifier cela pour que NPM se lance. -
Si vous oubliez votre mot de passe (oui, cela arrive aux plus distraits et vu le nombre de mot de passe, c’est possible) 1. Ouvrir le terminal du l’instance nginx :
docker exec -it nginx* sh1. Installer sqlite3 pour modifier la base de données :apt install sqlite3 -y1. Accéder à la base de données :sqlite3 /data/database.sqlite1. Supprimer tous les utilisateurs :UPDATE user sets is_deleted=1;1. Sortir de sqlite :exit;1. Sortir de l’instance nginx :exit1. Redémarrer l’instance nginx :docker restart nginx*`
#Update 2025-10-21 Et oui, déjà un update. Nginx Proxy Manager, c’est bien … pour gérer des proxy. Sauf que mon idée, c’est de faire plus que cela, notamment d’héberger des services différents dont du web classique.
Donc retour à nginx :)
- Installation rapide avec
apt-get install nginx - Lancement
systemctl start nginx - Installation de php (sait-on jamais) :
apt-get install php8.4-fpm php8.4-mysql php8.4-curl php8.4-gd php8.4-zip php8.4-xml; Il y a plus que simplement PHP. Veillez à vérifier la dernière version encore et adapter dans la commande. - Ajouter PHP dans nginx en éditant
/etc/nginx/sites-enabled/defaulten remplacant :
#location ~ \.php$ {
# include snippets/fastcgi-php.conf;
#
#With php5-cgi alone:
#fastcgi_pass 127.0.0.1:9000;
#With php5-fpm:
#fastcgi_pass unix:/var/run/php5-fpm.sock;
#}
par :
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
A nouveau, il faut vérifier la version de PHP (en 2025-10, c’est la 8.4).
- Recharger nginx avec
systemctl reload nginx
C’est la base.
Tous les sites actifs sont dans /etc/nginx/sites-enabled. Les sites disponibles sont dans /etc/nginx/sites-available.
Idéalement, on prépare puis on rend disponible.
Une manière de faire (ou contourner l’esprit) est de faire des liens symobliques : ln -s /etc/nginx/sites-available/monsite.com /etc/nginx/sites-enabled/.
Avant de relanger nginx (avec un systemctl restart nginx), on peut vérifier la configuration avec nginx -t. Plutôt utile !
Et pour le reverse proxy ?
Il suffit de créer un fichier dans /etc/nginx/sites-enabled contenant :
server {
listen 80;
listen [::]:80;
server_name pdf.home.lan pdf.lan;
http2 off;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://192.168.1.2:3000;
}
}
Cela permet dont de rediriger discrètement pdf.home.lan vers http://192.168.1.2:3000.
Si je dois rediriger vers un port et un sous-dossier explicitement ?
Pour une raison que j’ignore (et j’ignore beaucoup de choses), la fonction proxy_pass ne fonctionne pas.
J’utilise return 301 http://MON_IP:MON_PORT/MON_DOSSIER :
server {
listen 80;
listen [::]:80;
server_name serviio.home.lan serviio.lan;
http2 off;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
return 301 http://serviio.home.lan:23423/console;
}
}
Source
Bolet.io - How I Supercharged My Pi-hole Setup with Nginx Proxy Manager