Reverse Proxy
SwissKnife über HTTPS veröffentlichen, ohne die von FFmpeg WASM benötigten Header zu entfernen.
SwissKnife besitzt keine Authentifizierung. Ein Reverse Proxy beendet vor allem TLS. Entscheidend ist kein Cookie, sondern SharedArrayBuffer, das FFmpeg WASM benötigt.
Die nginx.conf des Produkts sendet folgende Header:
Cross-Origin-Opener-Policy: same-originCross-Origin-Embedder-Policy: require-corpCross-Origin-Resource-Policy: same-origin
Entfernt oder ersetzt der Proxy sie, kann die Audio-/Video-Engine nicht laden. Bildkonvertierungen mit Canvas können weiterhin funktionieren.
Die Beispiele verwenden swissknife.example.com und 127.0.0.1:2501. Passe den Hostnamen an; ändere den Port nur, wenn dein Host-Mapping nicht mehr 2501 lautet.
Docker-Bindung einschränken
So akzeptiert der Container nur Datenverkehr von einem Proxy auf demselben Host:
services:
swissknife:
ports:
- "127.0.0.1:2501:2501"Caddy auf dem Host
swissknife.example.com {
encode zstd gzip
reverse_proxy 127.0.0.1:2501
}Caddy leitet Antwortheader des Upstreams normalerweise weiter. Prüfe in den Browser-Entwicklertools, dass COOP und COEP auf / und /ffmpeg/ffmpeg-core.wasm weiterhin vorhanden sind.
Nginx auf dem Host
server {
listen 443 ssl http2;
server_name swissknife.example.com;
ssl_certificate /etc/letsencrypt/live/swissknife.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/swissknife.example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:2501;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_hide_header Cross-Origin-Opener-Policy;
proxy_hide_header Cross-Origin-Embedder-Policy;
proxy_hide_header Cross-Origin-Resource-Policy;
add_header Cross-Origin-Opener-Policy "same-origin" always;
add_header Cross-Origin-Embedder-Policy "require-corp" always;
add_header Cross-Origin-Resource-Policy "same-origin" always;
}
}Wenn Nginx Antwortheader überschreibt, bleiben die add_header-Werte des Upstreams nicht immer erhalten. Der Block setzt sie ausdrücklich. Teste die Konfiguration vor dem Neuladen.
COEP nicht für die Dokumentation aktivieren
Diese Dokumentation und die Präsentationsseite benötigen kein require-corp. Übernimm diese Header nicht außerhalb der Konvertierungsanwendung.