Behind Nginx
Run Drip behind Nginx for advanced configurations.
Overview
Run Drip on an internal port (e.g., 8443) in plain TCP mode and let Nginx handle TLS termination. Useful when:
- You have multiple services on the same server
- You need advanced load balancing
- You want to use Nginx's caching or rate limiting
> Important: When tls_enabled: false, drip-server runs in plain TCP mode and MUST be placed behind a reverse proxy (Caddy, Nginx, etc.) that handles TLS termination. Never expose plain TCP mode directly to the internet.
Step 1: Create Drip Server Config
Create /etc/drip/config.yaml:
yaml
port: 8443
domain: tunnel.example.com
tls_enabled: false
public_port: 443
token: YOUR_SECRET_TOKEN
tcp_port_min: 20000
tcp_port_max: 20100
metrics_token: YOUR_METRICS_TOKENNote: tls_enabled: false means Drip runs in plain TCP mode, letting Nginx handle TLS.
Step 2: Get SSL Certificate
bash
sudo certbot certonly --manual --preferred-challenges dns \
-d "*.tunnel.example.com" -d "tunnel.example.com"Step 3: Configure Nginx
Create /etc/nginx/sites-available/drip:
nginx
# Redirect all HTTP traffic to HTTPS
server {
listen 80;
server_name tunnel.example.com *.tunnel.example.com;
return 301 https://$host$request_uri;
}
# HTTPS reverse proxy → Drip Server
server {
listen 443 ssl http2;
server_name *.tunnel.example.com tunnel.example.com;
# SSL certificate
ssl_certificate /etc/letsencrypt/live/tunnel.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/tunnel.example.com/privkey.pem;
# Proxy to Drip Server
location / {
proxy_pass http://127.0.0.1:8443;
proxy_http_version 1.1;
# Forward request headers
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# Timeout settings
proxy_connect_timeout 60s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
# Disable buffering
proxy_buffering off;
proxy_request_buffering off;
}
}Step 4: Enable Site
bash
sudo ln -s /etc/nginx/sites-available/drip /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginxImportant Notes
proxy_buffering offis required for real-time streaming- WebSocket upgrade headers are required for tunnel connections
- Since
tls_enabled: false, we usehttp://in proxy_pass (not https)
TCP Tunnels
TCP tunnels bypass Nginx and connect directly to the Drip server's TCP port range. Make sure to open the TCP port range in your firewall:
bash
sudo ufw allow 20000:20100/tcpVerify Setup
bash
# Check Nginx config
sudo nginx -t
# Check Nginx logs
sudo tail -f /var/log/nginx/error.log
# Test health endpoint
curl https://tunnel.example.com/health