server { listen 80{% if 'default' in nginx_vhost and nginx_vhost.default %} default_server{% endif %}; listen [::]:80{% if 'default' in nginx_vhost and nginx_vhost.default %} default_server{% endif %}; server_name {{ nginx_vhost.hostnames | join(' ') }}; {% if 'acme' in nginx_vhost and nginx_vhost.acme %} include snippets/acmetool.conf; location / { return 301 https://$host$request_uri; } } server { listen 443 ssl http2{% if 'default' in nginx_vhost and nginx_vhost.default %} default_server{% endif %}; listen [::]:443 ssl http2{% if 'default' in nginx_vhost and nginx_vhost.default %} default_server{% endif %}; server_name {{ nginx_vhost.hostnames | join(' ') }}; include snippets/acmetool.conf; include snippets/tls{% if 'tls_variant' in nginx_vhost %}-{{ nginx_vhost.tls_variant }}{% endif %}.conf; ssl_certificate {{ x509_certificate_path_fullchain }}; ssl_certificate_key {{ x509_certificate_path_key }}; include snippets/hsts.conf; {% endif %} {% if 'extra_directives' in nginx_vhost %} {{ nginx_vhost.extra_directives | indent(4) }} {% endif %} {% for path, location in nginx_vhost.locations.items() %} location {{ path }} { {% if 'proxy_pass' in location %} include snippets/proxy-nobuff.conf; proxy_set_header Host $host; include snippets/proxy-forward-headers.conf; # for websockets proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_pass {{ location.proxy_pass }}; {% if 'proxy_redirect' in location %} {% for entry in location.proxy_redirect %} proxy_redirect {{ entry.redirect }} {{ entry.replacement }}; {% endfor %} {% endif %} {% if 'proxy_ssl' in location %} {% for prop in (location.proxy_ssl | list | sort) %} proxy_ssl_{{ prop }} {{ location.proxy_ssl[prop] }}; {% endfor %} {% endif %} {% else %} {% if 'root' in location %} root {{ location.root }}; {% elif 'alias' in location %} alias {{ location.alias }}; {% endif %} {% if 'index' in location %} index {{ location.index }}; {% endif %} {% if 'autoindex' in location %} autoindex on; {% if 'format' in location.autoindex %} autoindex_format {{ nginx_vhost.autoindex.format }}; {% endif %} {% endif %} {% endif %} {% if 'extra_directives' in location %} {{ location.extra_directives | indent(8) }} {% endif %} } {% endfor %} }