2.6 KiB
Caddy Reverse Proxy – Backend Service (Railway)
A minimal, production-ready Caddy reverse proxy for backend services running on Railway.
Framework-agnostic — works with Django, FastAPI, Flask, Node.js, Go, and any HTTP backend.
This template forwards all incoming traffic to a private backend service using Railway’s internal network.
✨ Features
- 🚀 Minimal Caddy reverse proxy
- 🩺 Health check endpoint (
/healthz) - 🛡 Blocks common path scanning attempts
- 🔒 Sensible security headers
- 🔁 Works with any HTTP backend
- ⚙ Railway-ready (dynamic
$PORT) - 📦 No plugins, no custom Caddy build
📦 Files
Caddyfile– Caddy reverse proxy configurationDockerfile– Minimal container imageentrypoint.sh– Startup script
🔧 Required Environment Variables
| Variable | Description |
|---|---|
BACKEND_HOST |
Private Railway domain of your backend service |
BACKEND_PORT |
Port your backend listens on (e.g. 8000) |
Example (Railway):
BACKEND_HOST=${{MyBackend.RAILWAY_PRIVATE_DOMAIN}}
BACKEND_PORT=8000
🌐 Custom Domain
To use a custom domain with this proxy:
- Open your Railway project
- Go to Settings → Domains
- Add your custom domain
- Update your DNS records as instructed by Railway
Railway handles HTTPS and TLS termination automatically.
No additional Caddy configuration is required.
🩺 Health Check
The proxy exposes a health endpoint:
GET /healthz
Always returns 200 OK and does not depend on backend availability.
🔒 Security Notes
This template blocks common automated scans such as:
/xmlrpc.php/.env/.git/wp-login.php/phpmyadmin
Security headers included by default:
X-Frame-Options: DENYX-Content-Type-Options: nosniffReferrer-Policy: strict-origin
🚀 Usage
- Deploy this repository on Railway
- Set the required environment variables
- Point
BACKEND_HOSTto your private backend service - Done 🎉
All incoming traffic will be proxied to your backend.
🧠 Notes
- HTTPS is handled by Railway
- This template does not serve static files
- Designed to be simple, transparent, and extensible
📄 License
This project is licensed under the MIT License.
It uses Caddy, which is licensed under the Apache License 2.0.
This template is community-maintained.