English | Francais | 中文
HAProxy Manager - Tableau de bord de proxy inverse
Gestion de proxy inverse de niveau entreprise avec certificats SSL automatiques, configuration de vhosts et surveillance de la sante des backends.
Fonctionnalites
| Fonctionnalite |
Description |
| Gestion des Vhosts |
Creer et gerer les hotes virtuels |
| ACME SSL |
Certificats Let's Encrypt automatiques |
| Equilibrage de charge |
Round-robin, least-conn, source |
| Health Checks |
Surveillance des serveurs backend |
| Statistiques |
Tableau de bord de trafic en temps reel |
| Generateur de config |
Generation automatique de config HAProxy |
| Conteneur LXC |
Fonctionne isole dans un conteneur |
Demarrage rapide
Creer un Vhost
- Allez dans Services -> HAProxy -> Vhosts
- Cliquez sur + Ajouter Vhost
- Remplissez :
- Domaine :
app.example.com
- Backend : Selectionnez ou creez
- SSL : Activer
- ACME : Certificat automatique
- Cliquez sur Enregistrer et appliquer
Architecture
+-------------------------------------+
Internet | Conteneur HAProxy |
| | +-----------------------------+ |
v | | Frontend | |
+---------+ | | :80 -> redirection :443 | |
| Port 80 |------>| | :443 -> terminaison SSL | |
|Port 443 | | +-------------+---------------+ |
+---------+ | | |
| v |
| +-----------------------------+ |
| | Backends | |
| | app.example.com ->:8080 | |
| | api.example.com ->:3000 | |
| | blog.example.com->:4000 | |
| +-----------------------------+ |
+-------------------------------------+
Tableau de bord
+------------------------------------------------------+
| HAProxy En cours |
+------------------------------------------------------+
| |
| Statistiques |
| +- Vhosts : 5 actifs |
| +- Backends : 8 configures |
| +- Certificats : 5 valides |
| +- Requetes : 12.5K/min |
| |
| Sante des backends |
| +------------+--------+--------+---------+ |
| | Backend | Statut | Server | Latence | |
| +------------+--------+--------+---------+ |
| | webapp | OK | 2/2 | 12ms | |
| | api | OK | 1/1 | 8ms | |
| | blog | DEGRAD | 1/2 | 45ms | |
| +------------+--------+--------+---------+ |
| |
+------------------------------------------------------+
Configuration des Vhosts
Creer un Vhost
ubus call luci.haproxy create_vhost '{
"domain": "app.example.com",
"backend": "webapp",
"ssl": 1,
"ssl_redirect": 1,
"acme": 1,
"enabled": 1
}'
Options de Vhost
| Option |
Defaut |
Description |
domain |
- |
Nom de domaine (requis) |
backend |
- |
Nom du backend vers lequel router |
ssl |
1 |
Activer SSL/TLS |
ssl_redirect |
1 |
Rediriger HTTP vers HTTPS |
acme |
1 |
Demander auto certificat Let's Encrypt |
enabled |
1 |
Vhost actif |
Lister les Vhosts
ubus call luci.haproxy list_vhosts
# Reponse :
{
"vhosts": [{
"id": "app_example_com",
"domain": "app.example.com",
"backend": "webapp",
"ssl": true,
"ssl_redirect": true,
"acme": true,
"enabled": true,
"cert_status": "valid",
"cert_expiry": "2025-03-15"
}]
}
Configuration des backends
Creer un backend
ubus call luci.haproxy create_backend '{
"name": "webapp",
"mode": "http",
"balance": "roundrobin"
}'
Ajouter un serveur au backend
ubus call luci.haproxy create_server '{
"backend": "webapp",
"name": "srv1",
"address": "192.168.255.10",
"port": 8080,
"weight": 100,
"check": 1
}'
Modes de backend
| Mode |
Description |
http |
Proxy HTTP couche 7 |
tcp |
Proxy TCP couche 4 |
Equilibrage de charge
| Algorithme |
Description |
roundrobin |
Alterner entre les serveurs |
leastconn |
Moins de connexions actives |
source |
Sticky par IP client |
uri |
Sticky par hash URI |
Certificats SSL
Certificats automatiques ACME
Quand acme: 1 est defini :
- HAProxy sert le challenge ACME sur le port 80
- Let's Encrypt valide la propriete du domaine
- Certificat stocke dans
/srv/haproxy/certs/
- Renouvellement automatique avant expiration
Certificat manuel
# Uploader un certificat
ubus call luci.haproxy upload_certificate '{
"domain": "app.example.com",
"cert": "<certificat PEM>",
"key": "<cle privee PEM>"
}'
Statut des certificats
ubus call luci.haproxy list_certificates
# Reponse :
{
"certificates": [{
"domain": "app.example.com",
"status": "valid",
"issuer": "Let's Encrypt",
"expiry": "2025-03-15",
"days_left": 45
}]
}
Demander un certificat manuellement
ubus call luci.haproxy request_certificate '{"domain":"app.example.com"}'
Statistiques
Obtenir les stats
ubus call luci.haproxy get_stats
# Reponse :
{
"frontend": {
"requests": 125000,
"bytes_in": 1234567890,
"bytes_out": 9876543210,
"rate": 150
},
"backends": [{
"name": "webapp",
"status": "UP",
"servers_up": 2,
"servers_total": 2,
"requests": 45000,
"response_time_avg": 12
}]
}
Page de stats
Accedez aux stats HAProxy a :
http://192.168.255.1:8404/stats
Configuration
Structure UCI
# /etc/config/haproxy
config haproxy 'main'
option enabled '1'
option stats_port '8404'
config backend 'webapp'
option name 'webapp'
option mode 'http'
option balance 'roundrobin'
option enabled '1'
config server 'webapp_srv1'
option backend 'webapp'
option name 'srv1'
option address '192.168.255.10'
option port '8080'
option weight '100'
option check '1'
option enabled '1'
config vhost 'app_example_com'
option domain 'app.example.com'
option backend 'webapp'
option ssl '1'
option ssl_redirect '1'
option acme '1'
option enabled '1'
Generer la config
# Regenerer haproxy.cfg depuis UCI
ubus call luci.haproxy generate
# Recharger HAProxy
ubus call luci.haproxy reload
Valider la config
ubus call luci.haproxy validate
# Reponse :
{
"valid": true,
"message": "La configuration est valide"
}
API RPCD
Controle du service
| Methode |
Description |
status |
Obtenir le statut HAProxy |
start |
Demarrer le service HAProxy |
stop |
Arreter le service HAProxy |
restart |
Redemarrer HAProxy |
reload |
Recharger la configuration |
generate |
Generer le fichier de config |
validate |
Valider la configuration |
Gestion des Vhosts
| Methode |
Description |
list_vhosts |
Lister tous les vhosts |
create_vhost |
Creer un nouveau vhost |
update_vhost |
Mettre a jour un vhost |
delete_vhost |
Supprimer un vhost |
Gestion des backends
| Methode |
Description |
list_backends |
Lister tous les backends |
create_backend |
Creer un backend |
delete_backend |
Supprimer un backend |
create_server |
Ajouter un serveur au backend |
delete_server |
Supprimer un serveur |
Certificats
| Methode |
Description |
list_certificates |
Lister tous les certificats |
request_certificate |
Demander un certificat ACME |
upload_certificate |
Uploader un certificat manuel |
delete_certificate |
Supprimer un certificat |
Emplacements des fichiers
| Chemin |
Description |
/etc/config/haproxy |
Configuration UCI |
/var/lib/lxc/haproxy/ |
Racine du conteneur LXC |
/srv/haproxy/haproxy.cfg |
Config generee |
/srv/haproxy/certs/ |
Certificats SSL |
/srv/haproxy/acme/ |
Challenges ACME |
/usr/libexec/rpcd/luci.haproxy |
Backend RPCD |
/usr/sbin/haproxyctl |
Outil CLI |
Outil CLI
Commandes haproxyctl
# Statut
haproxyctl status
# Lister les vhosts
haproxyctl vhosts
# Ajouter un vhost
haproxyctl vhost add app.example.com --backend webapp --ssl --acme
# Supprimer un vhost
haproxyctl vhost del app.example.com
# Lister les certificats
haproxyctl cert list
# Demander un certificat
haproxyctl cert add app.example.com
# Generer la config
haproxyctl generate
# Recharger
haproxyctl reload
# Valider
haproxyctl validate
Depannage
HAProxy ne demarre pas
# Verifier le conteneur
lxc-info -n haproxy
# Demarrer le conteneur
lxc-start -n haproxy
# Verifier les logs
lxc-attach -n haproxy -- cat /var/log/haproxy.log
503 Service indisponible
- Verifier que le backend est configure :
ubus call luci.haproxy list_backends
- Verifier que le serveur est joignable :
curl http://192.168.255.10:8080
- Verifier les logs HAProxy
Certificat ne fonctionne pas
- Assurez-vous que le DNS pointe vers votre IP publique
- Assurez-vous que les ports 80/443 sont accessibles depuis internet
- Verifiez le challenge ACME :
curl http://app.example.com/.well-known/acme-challenge/test
Echec de validation de la config
# Afficher les erreurs de validation
lxc-attach -n haproxy -- haproxy -c -f /etc/haproxy/haproxy.cfg
Securite
Regles de pare-feu
HAProxy a besoin des ports 80/443 ouverts depuis le WAN :
# Crees automatiquement quand le vhost utilise SSL
uci show firewall | grep HAProxy
Limitation de debit
Ajouter a la config du backend :
stick-table type ip size 100k expire 30s store http_req_rate(10s)
http-request deny deny_status 429 if { sc_http_req_rate(0) gt 100 }
Licence
Licence MIT - Copyright (C) 2025 CyberMind.fr