
Un reverse proxy comme nginx, construit sur pingora, simple et efficace.
Avant que la version de pingap ne soit stable, aucune pull request ne sera acceptée. Si vous avez des questions, veuillez d'abord créer une nouvelle issue.

Pingap est un reverse proxy haute performance propulsé par Cloudflare Pingora. Il simplifie la gestion opérationnelle en permettant le rechargement à chaud dynamique de la configuration sans interruption de service, via des fichiers TOML concis et une interface d'administration web intuitive.
Sa force principale réside dans un puissant système de plugins, offrant plus de vingt fonctionnalités prêtes à l'emploi pour l'authentification (JWT, Key Auth), la sécurité (CSRF, restrictions IP/Referer/UA), le contrôle du trafic (limitation de débit, mise en cache), la modification de contenu (redirections, substitution de contenu) et l'observabilité (Request ID). Cela fait de Pingap non pas un simple proxy, mais une passerelle applicative flexible et extensible, conçue pour gérer sans effort des scénarios complexes, de la protection d'API au déploiement d'applications web modernes.
中文说明 | Documentation · 中文文档 | Examples | Plugins | Crates
flowchart LR
internet("Internet") -- request --> pingap["Pingap"]
pingap -- proxy:pingap.io/api/* --> apiUpstream["10.1.1.1,10.1.1.2"]
pingap -- proxy:cdn.pingap.io --> cdnUpstream["10.1.2.1,10.1.2.2"]
pingap -- proxy:/* --> upstream["10.1.3.1,10.1.3.2"]
🚀 Haute performance et fiabilité
🔧 Dynamique et facile à utiliser
🧩 Extensibilité puissante
📊 Observabilité moderne
{:ja4} dans les journaux d'accès, $ja4 dans les en-têtes upstream) pour distinguer les clients par leur pile TLS, aussi bien sur les builds OpenSSL que rustls.La façon la plus simple de démarrer avec Pingap est d'utiliser Docker Compose.
docker-compose.yml :# docker-compose.yml
version: '3.8'
services:
pingap:
image: vicanso/pingap:latest # For production, use a specific version like vicanso/pingap:0.12.1-full
container_name: pingap-instance
restart: always
ports:
- "80:80"
- "443:443"
volumes:
# Mount a local directory to persist all configurations and data
- ./pingap_data:/opt/pingap
environment:
# Configure using environment variables
- PINGAP_CONF=/opt/pingap/conf
- PINGAP_ADMIN_ADDR=0.0.0.0:80/pingap
- PINGAP_ADMIN_USER=pingap
- PINGAP_ADMIN_PASSWORD=<YourSecurePassword> # Change this!
command:
# Start pingap and enable hot-reloading
- pingap
- --autoreload
mkdir pingap_data
docker-compose up -d
Votre instance Pingap est maintenant en cours d'exécution ! Vous pouvez accéder à l'interface d'administration web à l'adresse http://localhost/pingap avec les identifiants que vous avez définis.
Pour Linux et macOS, vous pouvez installer le dernier binaire précompilé dans /usr/local/bin/pingap avec une seule commande :
curl -sSL https://raw.githubusercontent.com/vicanso/pingap/main/install.sh | sh
Variables d'environnement optionnelles :
PINGAP_FULL=1 — installe le build -full (toutes les fonctionnalités optionnelles activées)PINGAP_LIBC=gnu — sous Linux, utilise le build glibc au lieu du build statique musl par défautPINGAP_TLS=rustls — sous Linux, installe le build -rustls-full (backend TLS rustls, toutes les fonctionnalités optionnelles, sans OpenSSL) ; voir Backend TLS# Full-featured build
curl -sSL https://raw.githubusercontent.com/vicanso/pingap/main/install.sh | PINGAP_FULL=1 sh
Cibles prises en charge : Linux x86_64/arm64, Darwin x86_64/arm64. Consultez la page des releases pour tous les assets disponibles.
Pour des instructions plus détaillées, notamment pour exécuter depuis un binaire, consultez notre Documentation.
Une seule commande suffit pour servir un domaine en https et le rediriger vers un backend :
# certificate requested from let's encrypt
pingap --domain=pingap.io --upstream=192.168.1.1:3000
# or bring your own certificate
pingap --domain=pingap.io --upstream=192.168.1.1:3000 --cert=/etc/ssl/pingap.io
Sans --cert, Pingap demande un certificat à Let's Encrypt via le défi
HTTP-01, donc pingap.io doit résoudre vers cet hôte et le port 80 doit être
accessible depuis Internet. Le certificat émis est conservé dans
~/.pingap/acme/<domains>.toml et réutilisé au redémarrage — l'émission est limitée en débit,
donc ne le supprimez pas. Tout le reste provient toujours de la ligne de commande : modifier
--upstream prend effet au prochain démarrage sans toucher au certificat.
--cert accepte le certificat lui-même ou le répertoire qui le contient — les dispositions courantes
fullchain.pem / privkey.pem, cert.pem / key.pem et tls.crt / tls.key
sont détectées automatiquement, utilisez --key pour tout autre cas. L'écouteur
utilise par défaut 0.0.0.0:443 lorsqu'il y a un certificat et 0.0.0.0:80 lorsqu'il n'y a
ni certificat ni domaine, et --addr le remplace. --upstream
accepte une liste de backends séparés par des virgules, --domain une liste d'hôtes
séparés par des virgules (omettez-le pour servir tous les hôtes en http simple). Les requêtes pour un hôte
non listé reçoivent une réponse 404.
La configuration est générée à chaque démarrage, elle ne peut donc pas être modifiée via
l'interface d'administration : pour tout ce qui dépasse un seul serveur, utilisez --conf, qui ne peut pas être
combiné avec ces options.
Pingap est conçu pour s'adapter aux changements de configuration sans interruption de service.