Ideenquelle

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 :

  1. Créer un folder /opt/stacks/nginxproxymanager
  2. Rentrer dedans (avec cd)
  3. 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
  1. Lancer le compose : docker compose up -d Il 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.

  2. 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* sh 1. Installer sqlite3 pour modifier la base de données : apt install sqlite3 -y 1. Accéder à la base de données : sqlite3 /data/database.sqlite 1. Supprimer tous les utilisateurs : UPDATE user sets is_deleted=1; 1. Sortir de sqlite : exit; 1. Sortir de l’instance nginx : exit 1. 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 :)

  1. Installation rapide avec apt-get install nginx
  2. Lancement systemctl start nginx
  3. 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.
  4. Ajouter PHP dans nginx en éditant /etc/nginx/sites-enabled/default en 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).

  1. 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

Tags: