Python / Uvicorn Fundamentals Interview Questions
What are the key Uvicorn settings for a production-hardened deployment?
Development defaults are convenient but inappropriate for production. A hardened production configuration disables debug features, removes identifying headers, tunes performance, and restricts network exposure.
# Production-hardened Uvicorn command uvicorn main:app \ --host 0.0.0.0 \ --port 8000 \ --workers 4 \ --loop uvloop \ --http httptools \ --log-level warning \ --no-access-log \ --no-server-header \ --no-date-header \ --proxy-headers \ --forwarded-allow-ips "10.0.0.0/8" # Or using environment variables (recommended for containers): export UVICORN_HOST=0.0.0.0 export UVICORN_PORT=8000 export UVICORN_WORKERS=4 export UVICORN_LOOP=uvloop export UVICORN_HTTP=httptools export UVICORN_LOG_LEVEL=warning export UVICORN_NO_ACCESS_LOG=true export UVICORN_NO_SERVER_HEADER=true export UVICORN_PROXY_HEADERS=true export UVICORN_FORWARDED_ALLOW_IPS="10.0.0.0/8" uvicorn main:app
| Setting | Reason |
|---|---|
| --no-server-header | Hides 'uvicorn' from Server response header - reduces attack surface |
| --no-date-header | Slightly reduces response size; date often added by reverse proxy |
| --log-level warning | Eliminates per-request log I/O - reduces CPU by ~10% under load |
| --no-access-log | Same reason; access logging often better done at proxy layer |
| --no-reload | Never use reload in production - it single-processes and slows startup |
| --loop uvloop | 2-4x event loop throughput improvement |
| --http httptools | Faster HTTP parsing than h11 |
For maximum reliability in production, pair with Gunicorn (pip install uvicorn-worker) for process supervision, and a reverse proxy (Nginx, Caddy) for SSL termination and rate limiting.
More Related questions...