Etherpad in IFrames mit nginx einbinden lassen
In unserem vorherigen Beitrag Eine moderne Docker-Compose-Konfiguration für Etherpad mit nginx als Reverse-Proxy haben wir gezeigt, wie man eine einfache, zuverlässige Etherpad-Installation erstellt.
Wenn man jedoch Etherpads auf externen Websites einbinden möchte, sieht man Verbindungsfehler wie
Refused to display 'https://etherpad.nemeon.eu/p/Test123' in a frame because it set 'X-Frame-Options' to 'sameorigin'.und das Etherpad-iframe wird nicht geladen.
Um dies zu beheben, fügen wir eine Zeile zur nginx-Konfiguration hinzu. Bei diesem Ansatz müssen alle Domains aufgelistet werden, die das Etherpad einbinden dürfen (https://gather.town in diesem Beispiel).
Die hinzuzufügende Zeile ist
add_header "X-Frame-Options" "Allow-From https://gather.town";welche innerhalb des location / { ... }-Blocks hinzugefügt werden muss. Vollständiges Beispiel für den location /-Block:
location / {
proxy_pass http://localhost:17201/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_redirect default;
add_header "X-Frame-Options" "Allow-From https://gather.town";
}Vollständiges nginx-Konfigurationsbeispiel:
server {
server_name etherpad.mydomain.de;
access_log off;
error_log /var/log/nginx/etherpad.mydomain.de-error.log;
location / {
proxy_pass http://localhost:17201/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_redirect default;
add_header "X-Frame-Options" "Allow-From https://gather.town";
}
listen [::]:443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/etherpad.mydomain.de/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/etherpad.mydomain.de/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
}
server {
if ($host = etherpad.mydomain.de) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen [::]:80; # managed by Certbot
server_name etherpad.mydomain.de;
return 404; # managed by Certbot
}Funktionsweise
Das Etherpad-Backend, das über nginx als Reverse-Proxy bereitgestellt wird, fügt einen X-Frame-Options: sameorigin-Header hinzu, der iframes von anderen Domains effektiv verhindert. Mit der add_header-Direktive überschreibt nginx diesen Wert mit Allow-From https://gather.town. Der Browser sieht nur Allow-From https://gather.town, was die iframe-Einbindung von den aufgelisteten Domains erlaubt.