Skip to main content

PyProxy

CI codecov PyPI version Python 3.13+ License: MIT

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 asyncio with optional uvloop acceleration
  • 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
  • CLIpyproxy 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

python_pyproxy-0.1.3.tar.gz (84.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

python_pyproxy-0.1.3-py3-none-any.whl (96.1 kB view details)

Uploaded Python 3

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

Hashes for python_pyproxy-0.1.3.tar.gz
Algorithm Hash digest
SHA256 710860ca72a1d1ec45d9da5d69be47cd0afe124db762d9a65e98bc959952a9a1
MD5 16ed72c132e812c63d8ff1262f7bd9e9
BLAKE2b-256 118f2ec60982aa6c6121acc2ac92c6dfd29e6a0ae5831a1b60e8935247b12dd4

See more details on using hashes here.

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

Hashes for python_pyproxy-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 e3839eec1ef789411b38fd40f564e1f145fb0965911996ff43b26540aa896e77
MD5 e2323e027043916b88ea1b8e095d5d80
BLAKE2b-256 d14e0081ef0ca0c18d2e2eed5ff685b5c0dd25c8383cc01d6c3a41f80c7141ad

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page