# Alle Anfragen die mit /s/ beginnen
location /s/ {
    # String, aus welchem die Prüfsumme und die Ablaufzeit extrahiert werden.
    # Diese werden mit einem Komma getrennt.
    # $arg_<name> sind URL-Parameter.
    # In der Regel kann diese Einstellung genau so bleiben, außer man möchte
    # die Parameter umbenennen (etwa 'md5' zu 'hash').
    secure_link $arg_md5,$arg_expires;

    # Erzeugung des Hashes, welcher zur Validierung herangezogen wird.
    # Im Beispiel enthält dieser:
    # - $secure_link_expires: Den expires-Parameter, um Manipulationen zu verhindern
    # - $uri: Der Pfad des Ressource
    # - $remote_addr: IP-Adresse des Clients
    # - secret: Statisches Secret, wird mit dem Webservice geteilt
    secure_link_md5 "$secure_link_expires$uri$remote_addr secret";

    # Falls die Prüfung nicht erfolgreich war, ist die Variable $secure_link leer.
    # In diesem Fall geben wir HTTP 403 (Forbidden) zurück.
    if ($secure_link = "") {
        return 403;
    }

    # Falls der Wert der String "0" ist, war die Signatur zwar in Ordnung,
    # aber der Link ist bereits abgelaufen. Hier könnte es auch sinnvoll sein,
    # dem Besucher eine erklärende Fehlermeldung zu geben.
    # HTTP 410 (Gone) verstehen Normalsterbliche nicht ;)
    if ($secure_link = "0") {
        return 410;
    }

    # Anstatt des Redirects können wir auch direkt auf die Inhalte zeigen.
    alias /home/cdn/data/secure-files/;
}
