
Um proxy reverso como o nginx, construído sobre pingora, simples e eficiente.
Um proxy reverso e gateway de aplicações construído sobre o Cloudflare Pingora. É configurado através de ficheiros TOML ou de uma interface web de administração que faz parte do binário, aplica alterações sem reiniciar e vem com mais de trinta plugins.
中文说明 | Documentation · 中文文档 | Examples | Plugins | Crates | Upgrading
pingap -t a verifica antes de ser guardada, versões anteriores podem ser mantidas e restauradas, e existem contas só de leitura e tokens de API. A sua página inicial apresenta gráficos do tráfego dos últimos quinze minutos - taxa, estado, latência, cada upstream - sem Prometheus.--autoreload). O que exige novos listeners é aplicado por um reinício que transfere os sockets (--autorestart, para um daemon no Linux), e o processo em execução continua a servir se o seu substituto não arrancar.-t constrói tudo o que um arranque construiria, --strict recusa chaves que não conhece, --diff mostra o que uma alteração faria. TOML, HCL ou KDL, em ficheiros ou em etcd, com segredos obtidos do ambiente ou de ficheiros.O resto do que um proxy reverso faz também está presente: HTTP/1.1, HTTP/2, WebSocket e gRPC-web; encaminhamento por host, caminho e expressão regular; round robin, least connections, consistent hashing e sessões sticky, com verificações de saúde, retries e um circuit breaker; backends a partir de DNS (A/AAAA, SRV) ou de labels Docker; o protocolo PROXY nos listeners e para com os upstreams; OpenSSL ou rustls.
Métricas, tracing e otimização de imagens estão nas 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
O admin está em http://localhost/pingap. As imagens são marcadas como latest, full e rustls-full, e <version>, <version>-full, <version>-rustls-full para uma versão. Cada uma também tem uma variante -distroless sem shell, onde command precisa começar com pingap como acima.
curl -sSL https://raw.githubusercontent.com/vicanso/pingap/main/install.sh | sh
instala a versão mais recente em /usr/local/bin/pingap no Linux e macOS (x86_64 e arm64). As variáveis antes de sh escolhem o que é instalado:
| Variável | Efeito |
|---|---|
PINGAP_FULL=1 | A build -full, com todos os recursos opcionais |
PINGAP_TLS=rustls | Linux: a build -rustls-full, sem OpenSSL (veja TLS backend) |
PINGAP_LIBC=gnu | Linux: a build glibc em vez da musl estática |
PINGAP_SERVICE=1 | Linux com systemd: também o serviço pingap e uma configuração inicial em /etc/pingap/conf; ele não é habilitado nem iniciado |
PINGAP_VERSION=0.15.0 | Essa versão em vez da mais recente |
Todos os assets estão na página de 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, o certificado é solicitado via HTTP-01: o domínio precisa resolver para este host, com a porta 80 acessível. Ele é mantido em ~/.pingap/acme/<domains>.toml e reutilizado na próxima inicialização. Não o exclua, a emissão é limitada por taxa.--cert é o certificado ou o diretório em que ele está (fullchain.pem / privkey.pem, cert.pem / key.pem e tls.crt / tls.key são encontrados; --key nomeia qualquer outro). --upstream e --domain recebem listas separadas por vírgulas, --addr o endereço no qual escutar.--conf, que não pode ser combinado com estas flags.[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"]
O mesmo pode ser escrito em HCL ou KDL. Cada chave está descrita na referência de configuração.
--autoreload | Uma alteração é aplicada sem reinício: em até dez segundos a partir de ficheiros, de imediato a partir do etcd. O que exige reinício é reportado e aguarda por ele. O modo para contentores |
-a, --autorestart | O mesmo, e um reinício que não descarta nenhum pedido para o que um reload não consegue alterar, como um endereço de escuta. Para um daemon (-d) no Linux; em qualquer outro lugar faz reload e reporta o que aguarda |
-t | Constrói cada upstream, location, plugin, certificado e servidor como um arranque faz, e não liga nada |
--strict | Uma chave que o Pingap não conhece, ou uma para a qual esta build não tem funcionalidade, é um erro, onde de outra forma seria um aviso. Para -t em CI |
--diff <other> | Imprime o que mudaria se <other> tomasse o lugar da configuração, com as credenciais mostradas como checksums |
$ENV:NAME, $FILE:/path | Como valor completo: substituído pela variável ou pelo ficheiro quando a configuração é carregada |