
Some checks failed
CI - 4NK_node / Code Quality (push) Failing after 50s
CI - 4NK_node / Unit Tests (push) Failing after 29s
CI - 4NK_node / Integration Tests (push) Failing after 12s
CI - 4NK_node / Security Tests (push) Failing after 27s
CI - 4NK_node / Docker Build & Test (push) Failing after 9s
CI - 4NK_node / Documentation Tests (push) Failing after 4s
CI - 4NK_node / Security Audit (push) Successful in 3s
CI - 4NK_node / Release Guard (push) Has been skipped
CI - 4NK_node / Performance Tests (push) Successful in 28s
CI - 4NK_node / Notify (push) Failing after 2s
CI - 4NK_node / Publish Release (push) Has been skipped
6.0 KiB
6.0 KiB
Configuration Nginx sur l'hôte Debian pour 4NK_node
Vue d'ensemble
Cette configuration installe Nginx directement sur l'hôte Debian pour servir de reverse proxy vers tous les services Docker 4NK_node. Cela permet d'avoir un point d'entrée unique et une meilleure gestion des accès.
Architecture
Internet/Client → Nginx (hôte:80) → Services Docker 4NK_node
Services exposés via Nginx
Route | Service | Port Docker | Description |
---|---|---|---|
/ |
IHM Client Web | 3003 | Interface principale React |
/bitcoin/rpc/ |
Bitcoin Core | 38332 | API JSON-RPC Bitcoin |
/bitcoin/p2p/ |
Bitcoin Core | 38333 | Port P2P Bitcoin |
/blindbit/ |
BlindBit | 8000 | API BlindBit |
/storage/ |
SDK Storage | 8081 | API de stockage |
/relay1/ |
SDK Relay 1 | 8090 | API Relay 1 |
/relay2/ |
SDK Relay 2 | 8092 | API Relay 2 |
/relay3/ |
SDK Relay 3 | 8094 | API Relay 3 |
/signer/ |
SDK Signer | 9090 | API de signature |
/ihm/ |
IHM Client | 3003 | Interface web |
/ihm-http/ |
IHM Client | 8080 | Interface HTTP |
/grafana/ |
Grafana | 3000 | Dashboard de monitoring |
/loki/ |
Loki | 3100 | API de logs |
Installation
Prérequis
- Debian avec accès root/sudo
- Services Docker 4NK_node démarrés
- Port 80 disponible
Installation automatique
cd 4NK_dev/4NK_node/conf
sudo ./install-nginx-host.sh
Installation manuelle
-
Installer Nginx
sudo apt update sudo apt install -y nginx
-
Configurer les logs
sudo mkdir -p /var/log/nginx/4nk-node sudo chown www-data:www-data /var/log/nginx/4nk-node
-
Installer la configuration
sudo cp nginx.conf /etc/nginx/nginx.conf sudo nginx -t sudo systemctl restart nginx sudo systemctl enable nginx
Configuration
Fichier principal
- Fichier:
conf/nginx.conf
- Emplacement système:
/etc/nginx/nginx.conf
Caractéristiques
- Rate limiting: 10 req/s pour les APIs, 1 req/s pour les connexions
- Gzip compression: Optimisé pour les réponses HTTP
- Security headers: Protection XSS, CSRF, etc.
- WebSocket support: Pour les services temps réel
- Health check: Endpoint
/health
pour la surveillance
Logs
- Accès:
/var/log/nginx/4nk-node-access.log
- Erreurs:
/var/log/nginx/4nk-node-error.log
- Format: Logs détaillés avec upstream information
Utilisation
Test de connectivité
# Test du health check
curl http://localhost/health
# Test Bitcoin RPC
curl -X POST http://localhost/bitcoin/rpc/ \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "1.0", "id": "test", "method": "getblockchaininfo", "params": []}'
# Test BlindBit
curl http://localhost/blindbit/health
Monitoring
# Statut du service
sudo systemctl status nginx
# Logs en temps réel
sudo tail -f /var/log/nginx/4nk-node-access.log
# Logs d'erreurs
sudo tail -f /var/log/nginx/4nk-node-error.log
Sécurité
Headers de sécurité
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Referrer-Policy: no-referrer-when-downgrade
Content-Security-Policy: default-src 'self' http: https: data: blob: 'unsafe-inline'
Rate Limiting
- APIs: 10 requêtes par seconde avec burst de 20
- Connexions: 1 requête par seconde avec burst de 5
Accès réseau
- Écoute: Port 80 sur toutes les interfaces
- Upstream: Connexions locales vers les ports Docker exposés
Dépannage
Problèmes courants
-
Port 80 déjà utilisé
sudo netstat -tlnp | grep :80 sudo systemctl stop apache2 # Si Apache est installé
-
Configuration invalide
sudo nginx -t sudo nginx -T | grep -A 10 -B 10 "error"
-
Permissions de logs
sudo chown -R www-data:www-data /var/log/nginx/4nk-node sudo chmod 755 /var/log/nginx/4nk-node
-
Services Docker non accessibles
# Vérifier que les services écoutent sudo netstat -tlnp | grep -E "(38332|8000|8081|8090|9090|3003)" # Vérifier les conteneurs Docker docker ps
Logs de débogage
# Activer le mode debug temporairement
sudo nginx -g "error_log /var/log/nginx/debug.log debug;"
# Redémarrer et vérifier
sudo systemctl restart nginx
sudo tail -f /var/log/nginx/debug.log
Maintenance
Mise à jour de la configuration
# Sauvegarder l'ancienne
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup.$(date +%Y%m%d_%H%M%S)
# Installer la nouvelle
sudo cp nginx.conf /etc/nginx/nginx.conf
# Tester et redémarrer
sudo nginx -t && sudo systemctl reload nginx
Rotation des logs
# Créer un script de rotation personnalisé
sudo tee /etc/logrotate.d/4nk-node-nginx << EOF
/var/log/nginx/4nk-node-*.log {
daily
missingok
rotate 52
compress
delaycompress
notifempty
create 644 www-data www-data
postrotate
systemctl reload nginx
endscript
}
EOF
Intégration avec le monitoring
Grafana
- URL:
http://localhost/grafana/
- Datasource: Loki configuré automatiquement
- Dashboard: 4NK Node Overview disponible
Loki
- URL:
http://localhost/loki/
- Logs Nginx: Intégrés via Promtail
- Requêtes: LogQL pour analyser les accès
Support et développement
Ajout de nouveaux services
- Ajouter l'upstream dans la section
upstream
- Créer la location block correspondante
- Tester la configuration :
sudo nginx -t
- Recharger :
sudo systemctl reload nginx
Configuration HTTPS
- Obtenir les certificats SSL
- Décommenter la section HTTPS dans
nginx.conf
- Configurer les chemins des certificats
- Redémarrer Nginx
Performance
- Worker processes: Auto-détection du nombre de CPU
- Keepalive: 32 connexions par upstream
- Buffer sizes: Optimisés pour les APIs
- Timeouts: 30s pour les APIs lentes (Bitcoin, BlindBit)