{%- from "apache/map.jinja" import server with context -%}
  {%- if site.host.admin is defined %}
  ServerAdmin {{ site.host.admin }}
  {%- elif server.admin is defined %}
  ServerAdmin {{ server.admin }}
  {%- endif %}

  {%- if site.host is defined and site.host.name is defined %}
  ServerName {{ site.host.name }}
  {%- endif %}
  {%- if site.host.aliases is defined %}
  ServerAlias {{ site.host.aliases|join(' ') }}
  {%- endif %}

  ServerSignature {% if site.get('signature', server.get('signature', False)) %}On{% else %}Off{% endif %}
  TraceEnable {% if site.get('trace', server.get('trace', False)) %}On{% else %}Off{% endif %}
