PyProxy
A modern, production-grade reverse proxy built entirely in Python on asyncio.
PyProxy is a high-performance reverse proxy and load balancer designed for modern infrastructure. It implements its own HTTP request lifecycle from the ground up — no frameworks, no shortcuts.
Features
- Async-native — Built on Python's
asynciowith optionaluvloopacceleration - Full HTTP/1.1 — Streaming, chunked encoding, keep-alive, persistent connections
- Load Balancing — Round Robin, Weighted RR, Least Connections, IP Hash, and more
- Health Checking — Active and passive checks with automatic recovery and circuit breaker
- TLS Termination — Certificate loading, SNI, mutual TLS, OCSP stapling
- WebSocket Proxy — Full upgrade, ping/pong, streaming, reconnect
- Middleware Pipeline — Extensible before/after request hooks
- Caching — In-memory and Redis with Cache-Control, ETag, conditional requests
- Compression — gzip and Brotli with content negotiation
- Authentication — JWT, Basic Auth, API Keys, OAuth hooks
- Security — Rate limiting, IP allow/deny lists, CORS, CSRF, header sanitization
- Observability — Prometheus metrics, structured JSON logging, request tracing
- Hot Reload — Configuration changes applied without restart
- CLI —
pyproxy start,validate,reload,benchmark, and more
Quick Start
Installation
pip install python-pyproxy
Configuration
Create a config.yaml:
server:
bind_host: "0.0.0.0"
bind_port: 8080
routes:
- path: "/api"
upstream:
targets:
- host: "127.0.0.1"
port: 3000
logging:
level: "info"
format: "json"
Start the Proxy
pyproxy start config.yaml
Programmatic Usage
from pyproxy import Proxy
proxy = Proxy(config_path="config.yaml")
proxy.run()
Configuration
PyProxy supports YAML, JSON, and TOML configuration files. Environment variables
can override any setting using the PYPROXY_ prefix:
# Override bind port
export PYPROXY_SERVER__BIND_PORT=9090
# Override log level
export PYPROXY_LOGGING__LEVEL=debug
See examples/ for annotated configuration examples.
Development
# Clone and install
git clone https://github.com/ashvn24/PyProxy.git
cd PyProxy
pip install -e ".[dev,test]"
# Run checks
make lint # Ruff linting
make typecheck # Mypy strict mode
make test # Pytest
make coverage # Coverage report
make check-all # All of the above
See CONTRIBUTING.md for the full developer guide.
Architecture
PyProxy follows Clean Architecture with clear module boundaries:
| Module | Responsibility |
|---|---|
server |
Low-level asyncio TCP server, connection lifecycle |
routing |
Route matching (prefix, regex, host, wildcard) |
proxy |
Reverse proxy engine, header rewriting, streaming |
upstream |
Upstream connection pooling and management |
load_balancer |
Load balancing strategies |
health |
Health checking and circuit breaker |
middleware |
Extensible middleware pipeline |
config |
Configuration loading, validation, hot reload |
ssl |
TLS termination, certificate management |
websocket |
WebSocket proxy with upgrade handling |
cache |
Response caching (memory, Redis) |
compression |
gzip/Brotli response compression |
auth |
Authentication (JWT, Basic, API Key) |
security |
Rate limiting, CORS, IP filtering |
metrics |
Prometheus metrics collection |
logging |
Structured JSON logging with context |
License
MIT — see LICENSE for details.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file python_pyproxy-0.1.3.tar.gz.
File metadata
- Download URL: python_pyproxy-0.1.3.tar.gz
- Upload date:
- Size: 84.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
710860ca72a1d1ec45d9da5d69be47cd0afe124db762d9a65e98bc959952a9a1
|
|
| MD5 |
16ed72c132e812c63d8ff1262f7bd9e9
|
|
| BLAKE2b-256 |
118f2ec60982aa6c6121acc2ac92c6dfd29e6a0ae5831a1b60e8935247b12dd4
|
File details
Details for the file python_pyproxy-0.1.3-py3-none-any.whl.
File metadata
- Download URL: python_pyproxy-0.1.3-py3-none-any.whl
- Upload date:
- Size: 96.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e3839eec1ef789411b38fd40f564e1f145fb0965911996ff43b26540aa896e77
|
|
| MD5 |
e2323e027043916b88ea1b8e095d5d80
|
|
| BLAKE2b-256 |
d14e0081ef0ca0c18d2e2eed5ff685b5c0dd25c8383cc01d6c3a41f80c7141ad
|