{ auto_https off } # Main cell domain — no service-IP restriction needed http://mycell.cell, http://172.20.0.2:80 { handle /api/* { reverse_proxy cell-api:3000 } handle /calendar* { reverse_proxy cell-radicale:5232 } handle /files* { reverse_proxy cell-filegator:8080 } handle /webmail* { reverse_proxy cell-rainloop:8888 } handle { reverse_proxy cell-webui:80 } } # Per-service virtual IPs — each gets its own IP so iptables can target them http://calendar.cell, http://172.20.0.21:80 { reverse_proxy cell-radicale:5232 } http://files.cell, http://172.20.0.22:80 { reverse_proxy cell-filegator:8080 } http://mail.cell, http://webmail.cell, http://172.20.0.23:80 { reverse_proxy cell-rainloop:8888 } http://webdav.cell, http://172.20.0.24:80 { reverse_proxy cell-webdav:80 } http://api.cell { reverse_proxy cell-api:3000 } # Catch-all for direct IP / localhost :80 { handle /api/* { reverse_proxy cell-api:3000 } handle { reverse_proxy cell-webui:80 } }