{ servers { protocols h1 h2 } dynamic_dns { provider cloudflare {{ cloudflare_api_key }} domains { {% for domain in domains %} {% set base_domain = domain.name.lstrip('*.') %} {% if (domain.dynamic_dns | default(false)) %} {{ base_domain }} * {{ base_domain }} @ {% for site in domain.sites %} {{ base_domain }} {{ site.name }} {% endfor %} {% endif %} {% endfor %} } } grace_period 10s } {% for domain in domains %} {% set base_domain = domain.name.lstrip('*.') %} {% set domain_var_name = domain.name.replace('.', '') %} # Subdomain domain proxy for {{ base_domain }} *.{{ base_domain }} { tls { issuer acme { dns cloudflare {{ cloudflare_api_key }} } } {% for site in domain.sites %} @{{ site.name }} host {{ site.name }}.{{ base_domain }} handle @{{ site.name }} { reverse_proxy {{ site.host }}:{{ site.port }} { transport http { {% for opt in (site.transport_opts | default([])) %} {{ opt }} {% endfor %} } } } {% endfor %} } # Base domain proxy for {{ base_domain }} {% if domain.host is defined and domain.port is defined %} {{base_domain}} { tls { issuer acme { dns cloudflare {{ cloudflare_api_key }} } } @{{ domain_var_name }} { host {{ base_domain}} } handle @{{ domain_var_name }} { handle { reverse_proxy {{ domain.host }}:{{ domain.port }} { transport http { {% for opt in (domain.transport_opts | default([])) %} {{ opt }} {% endfor %} } } } } } {% endif %} {% endfor %}