Aller au contenu

Nginx

Vue d'ensemble

Nginx fonctionne comme conteneur Docker sur le VPS. Il sert de reverse proxy et de terminaison TLS pour tous les projets.

Configuration

Emplacement des fichiers

/root/projects/nginx-config/devops-epiapp/
├── nginx.conf                    # Configuration principale
├── sites-enabled/                # Configurations des sites
│   ├── alert-parent-backend.conf
│   ├── alert-parent-frontend.conf
│   ├── grafana.conf
│   ├── uptime-kuma.conf
│   └── ...
└── ssl/
    ├── wildcard-chained.epitools.pem   # Certificat wildcard (fullchain)
    └── wildcardkey.epitools.pem         # Clé privée

Certificat SSL wildcard

Un certificat wildcard *.epitools.bj est utilisé pour tous les sous-domaines. Il couvre automatiquement tout nouveau service sans avoir à générer un certificat supplémentaire.

Template de configuration

Pour ajouter un nouveau service, créer un fichier dans sites-enabled/ :

server {
    listen 443 ssl;
    server_name mon-projet.epitools.bj;

    ssl_certificate /etc/nginx/ssl/wildcard-chained.epitools.pem;
    ssl_certificate_key /etc/nginx/ssl/wildcardkey.epitools.pem;

    location / {
        proxy_pass http://host.docker.internal:PORT_HOTE;
        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;
    }
}

# Redirection HTTP → HTTPS
server {
    listen 80;
    server_name mon-projet.epitools.bj;
    return 301 https://$host$request_uri;
}

Avec support WebSocket

Pour les services utilisant WebSocket (Uptime Kuma, applications temps réel) :

server {
    listen 443 ssl;
    server_name mon-projet.epitools.bj;

    ssl_certificate /etc/nginx/ssl/wildcard-chained.epitools.pem;
    ssl_certificate_key /etc/nginx/ssl/wildcardkey.epitools.pem;

    location / {
        proxy_pass http://host.docker.internal:PORT_HOTE;
        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;

        # Support WebSocket
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

server {
    listen 80;
    server_name mon-projet.epitools.bj;
    return 301 https://$host$request_uri;
}

Configurations actuelles

Service Domaine Upstream
Alert-Parent Backend api.epitools.bj 127.0.0.1:5011
Alert-Parent Frontend alert.epitools.bj 127.0.0.1:3004
Grafana grafana.epitools.bj 127.0.0.1:6050
Uptime Kuma uptime.epitools.bj 127.0.0.1:6001

Tester et recharger

# Tester la configuration (vérifier la syntaxe)
docker exec nginx nginx -t

# Recharger sans interruption de service
docker exec nginx nginx -s reload

# Si le conteneur Nginx ne tourne pas
docker start nginx

Dépannage

Vérifier les logs Nginx

docker logs nginx --tail 50

Le site renvoie 502 Bad Gateway

Le service en amont ne répond pas :

  1. Vérifier que le conteneur du service tourne : docker ps
  2. Vérifier que le port est correct : curl http://127.0.0.1:PORT/health
  3. Vérifier que host.docker.internal résout correctement

Le site renvoie 403 Forbidden

Problème de permissions ou de configuration server_name.

Renouveler le certificat SSL

Le certificat wildcard doit être renouvelé manuellement. Remplacer les fichiers dans /root/projects/nginx-config/devops-epiapp/ssl/ puis recharger Nginx.