
Un reverse proxy comme nginx, construit sur pingora, simple et efficace.
Un proxy inverse et une passerelle applicative construits sur Cloudflare Pingora. Il se configure via des fichiers TOML ou une interface d'administration web intégrée au binaire, prend les modifications en compte sans redémarrage, et est livré avec plus de trente plugins.
中文说明 | Documentation · 中文文档 | Exemples | Plugins | Crates | Mise à niveau
pingap -t la vérifie avant d'être enregistrée, les versions antérieures peuvent être conservées et restaurées, et il existe des comptes en lecture seule et des jetons d'API. Sa page d'accueil affiche les graphiques du trafic des quinze dernières minutes - débit, statuts, latence, chaque amont - sans Prometheus.--autoreload). Ce qui nécessite de nouveaux écouteurs est appliqué par un redémarrage qui transfère les sockets (--autorestart, pour un démon sous Linux), et le processus en cours continue de servir si son remplaçant ne démarre pas.-t construit tout ce qu'un démarrage construirait, --strict refuse les clés qu'il ne connaît pas, --diff montre ce qu'une modification ferait. TOML, HCL ou KDL, dans des fichiers ou dans etcd, avec des secrets issus de l'environnement ou de fichiers.Le reste de ce que fait un proxy inverse est également présent : HTTP/1.1, HTTP/2, WebSocket et gRPC-web ; routage par hôte, chemin et expression régulière ; round robin, least connections, hachage cohérent et sessions persistantes, avec contrôles de santé, tentatives et disjoncteur ; backends issus du DNS (A/AAAA, SRV) ou des labels Docker ; le protocole PROXY sur les écouteurs et vers les amonts ; OpenSSL ou rustls.
Les métriques, le traçage et l'optimisation d'images sont dans les builds -full.
# docker-compose.yml
services:
pingap:
image: vicanso/pingap:latest # for production, pin a release: vicanso/pingap:<version>-full
container_name: pingap-instance
restart: always
ports:
- "80:80"
- "443:443"
volumes:
# everything Pingap keeps: configuration, certificates, cache
- ./pingap_data:/opt/pingap
environment:
- 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:
- pingap
- --autoreload
mkdir pingap_data
docker compose up -d
L'interface d'administration se trouve à l'adresse http://localhost/pingap. Les images sont étiquetées latest, full et rustls-full, ainsi que <version>, <version>-full, <version>-rustls-full pour une version publiée. Chacune possède également une variante -distroless sans shell, où command doit commencer par pingap comme ci-dessus.
curl -sSL https://raw.githubusercontent.com/vicanso/pingap/main/install.sh | sh
installe la dernière version dans /usr/local/bin/pingap sous Linux et macOS (x86_64 et arm64). Les variables placées devant sh déterminent ce qui est installé :
| Variable | Effet |
|---|---|
PINGAP_FULL=1 | La build -full, avec toutes les fonctionnalités optionnelles |
PINGAP_TLS=rustls | Linux : la build -rustls-full, sans OpenSSL (voir TLS backend) |
PINGAP_LIBC=gnu | Linux : la build glibc à la place de celle statique musl |
PINGAP_SERVICE=1 | Linux avec systemd : également le service pingap et une configuration de démarrage dans /etc/pingap/conf ; il n'est ni activé ni démarré |
PINGAP_VERSION=0.15.0 | Cette version à la place de la dernière |
Tous les assets sont sur la page des releases.
# the certificate comes from Let's Encrypt
pingap --domain=pingap.io --upstream=192.168.1.1:3000
# or bring your own
pingap --domain=pingap.io --upstream=192.168.1.1:3000 --cert=/etc/ssl/pingap.io
--cert, le certificat est commandé via HTTP-01 : le domaine doit résoudre vers cet hôte, avec le port 80 accessible. Il est conservé dans ~/.pingap/acme/<domains>.toml et réutilisé au démarrage suivant. Ne le supprimez pas, l'émission est soumise à des limites de débit.--cert est le certificat ou le répertoire dans lequel il se trouve (fullchain.pem / privkey.pem, cert.pem / key.pem et tls.crt / tls.key sont détectés ; --key désigne tout autre nom). --upstream et --domain prennent des listes séparées par des virgules, --addr l'adresse d'écoute.--conf, avec lequel ces options ne peuvent pas être combinées.[upstreams.api]
addrs = ["api.github.com:443"]
discovery = "dns"
sni = "api.github.com"
[plugins.staticServe]
category = "directory"
path = "~/Downloads"
[locations.github-api]
upstream = "api"
path = "/api"
proxy_set_headers = ["Host:api.github.com"]
rewrite = "^/api/(?<path>.+)$ /$1"
[locations.static]
plugins = ["staticServe"]
[servers.test]
addr = "127.0.0.1:6118"
locations = ["github-api", "static"]
La même chose peut être écrite en HCL ou en KDL. Chaque clé est décrite dans la référence de configuration.