server { listen 80; listen [::]:80; server_name element.example.com; location /.well-known/acme-challenge/ { root /var/www/html; } location / { return 301 https://$host$request_uri; } } server { listen 443 ssl; listen [::]:443 ssl; http2 on; server_name element.example.com; ssl_certificate /etc/letsencrypt/live/matrix.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/matrix.example.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; root /var/www/element; index index.html; # Element laedt Raum-Inhalte in Iframes/Worker; diese Header sind die # von Element empfohlene Mindestabsicherung. include /etc/nginx/snippets/element-security.conf; # config.json und index.html duerfen nicht dauerhaft gecacht werden, # sonst zeigen Clients nach einem Update alte Serverdaten. location = /config.json { include /etc/nginx/snippets/element-security.conf; add_header Cache-Control "no-cache" always; } location = /index.html { include /etc/nginx/snippets/element-security.conf; add_header Cache-Control "no-cache" always; } location = /version { include /etc/nginx/snippets/element-security.conf; add_header Cache-Control "no-cache" always; } # Gehashte Bundle-Dateien sind unveraenderlich. location /bundles/ { include /etc/nginx/snippets/element-security.conf; add_header Cache-Control "public, max-age=31536000, immutable" always; } location / { try_files $uri $uri/ /index.html; } }