Files

Nginx to Caddy Toolkit

Purpose: inventory an existing Nginx reverse-proxy setup and generate a first-pass Caddyfile for simple host/path proxying.

This module is intentionally conservative:

  • it auto-converts common/basic patterns
  • it flags complex directives for manual review
  • it never edits live Nginx config

Scripts

  • extract_nginx_inventory.sh
    • SSH into a host and collect nginx -T, /etc/nginx tarball, and a quick inventory summary.
  • nginx_to_caddy.sh
    • Convert basic Nginx server blocks into a generated Caddyfile.
  • Caddyfile.recommended
    • Hardened baseline config (security headers, sensible body limits, streaming behavior).
  • validate_caddy.sh
    • Run caddy fmt, caddy adapt, and caddy validate on the generated Caddyfile.

Quick Start

cd setup/nginx-to-caddy

./extract_nginx_inventory.sh --host=<host> --user=<user> --port=22 --yes
./nginx_to_caddy.sh --input=./output/nginx-full.conf --output=./output/Caddyfile.generated --tls-mode=cloudflare --yes
./validate_caddy.sh --config=./output/Caddyfile.generated --docker
./validate_caddy.sh --config=./Caddyfile.recommended --docker

Conversion Scope

Automatically handled:

  • server_name
  • listen (80/443 hints)
  • ssl_certificate, ssl_certificate_key
  • return 301/302 ...
  • location + proxy_pass (simple prefix or exact path)

Manual follow-up required for:

  • regex locations (~, ~*)
  • rewrite, try_files, if, map
  • FastCGI/uWSGI/SCGI/gRPC backends
  • auth subrequests, Lua, or advanced caching directives

See USAGE_GUIDE.md for a safe migration workflow.