# Vorlage für die Auslieferung der ÄndGgner-Browserfassung. Es gibt keinen
# Anwendungsprozess mehr: Der Server liefert nur statische Dateien aus
# (Inhalt von target/web/), gerechnet wird im Browser.
#
# Vor dem Einsatz anpassen: server_name, ssl_certificate(_key) (z. B. via certbot), root.

server {
    listen 80;
    listen [::]:80;
    server_name aendggner.example.org;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name aendggner.example.org;

    ssl_certificate     /etc/letsencrypt/live/aendggner.example.org/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/aendggner.example.org/privkey.pem;

    # Inhalt von target/web/ — ohne aendggner.js.wat, das nur ein Zwischenschritt
    # des Übersetzers ist.
    root /var/www/aendggner;
    index index.html;

    # Ohne diesen Typ lehnt der Browser die Streaming-Instanziierung des Moduls ab.
    types {
        application/wasm wasm;
    }

    gzip on;
    gzip_types application/wasm application/javascript text/css text/html;
    gzip_min_length 1024;

    # Das Wasm-Modul ist einige Megabyte groß und ändert sich nur mit einer neuen
    # Fassung; vorkomprimierte .gz/.br daneben zu legen lohnt sich (ngx_brotli bzw.
    # gzip_static).
    location ~ \.(wasm|js|css)$ {
        expires 7d;
        add_header Cache-Control "public";
    }

    location / {
        try_files $uri $uri/ =404;
    }
}
