67 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| { pkgs, ... }:
 | |
| let
 | |
|   elementWebVersion = "1.12.2";
 | |
|   element-web = pkgs.fetchzip {
 | |
|     url = "https://github.com/vector-im/element-web/releases/download/v${elementWebVersion}/element-v${elementWebVersion}.tar.gz";
 | |
|     sha256 = "sha256-EZtySIQHgb+Boq97LhzFYKTEO///6YMH3O2DrAy+7Fs=";
 | |
|   };
 | |
|   elementWebSecurityHeaders = ''
 | |
|   	# Configuration best practices
 | |
| 		# See: https://github.com/vector-im/element-web/tree/develop#configuration-best-practices
 | |
|     add_header X-Frame-Options SAMEORIGIN;
 | |
|     add_header X-Content-Type-Options nosniff;
 | |
|     add_header X-XSS-Protection "1; mode=block";
 | |
|     add_header Content-Security-Policy "frame-ancestors 'self'";
 | |
| 
 | |
|     add_header Strict-Transport-Security "max-age=63072000" always;
 | |
|   '';
 | |
| in
 | |
| {
 | |
|   services.nginx.virtualHosts."element.nekover.se" = {
 | |
|     forceSSL = true;
 | |
|     enableACME = true;
 | |
|     root = pkgs.buildEnv {
 | |
|       name = "element-web";
 | |
|       paths = [
 | |
|         element-web
 | |
|         ./element-web-config
 | |
|       ];
 | |
|     };
 | |
|     listen = [{
 | |
|       addr = "localhost";
 | |
|       port = 8443;
 | |
|       ssl = true;
 | |
|       extraParameters = ["proxy_protocol"];
 | |
|     }];
 | |
| 
 | |
|     # Set no-cache for the version, config and index.html
 | |
|     # so that browsers always check for a new copy of Element Web.
 | |
|     # NB http://your-domain/ and http://your-domain/? are also covered by this
 | |
| 
 | |
|     locations."= /index.html" = {
 | |
|       extraConfig = elementWebSecurityHeaders + ''
 | |
|         add_header Cache-Control "no-cache";
 | |
|       '';
 | |
|     };
 | |
|     locations."= /version" = {
 | |
|       extraConfig = elementWebSecurityHeaders + ''
 | |
|         add_header Cache-Control "no-cache";
 | |
|       '';
 | |
|     };
 | |
|     # covers config.json and config.hostname.json requests as it is prefix.
 | |
|     locations."/config" = {
 | |
|       extraConfig = elementWebSecurityHeaders + ''
 | |
|         add_header Cache-Control "no-cache";
 | |
|       '';
 | |
|     };
 | |
|     extraConfig = elementWebSecurityHeaders + ''
 | |
|       index  index.html;
 | |
| 
 | |
|       # redirect server error pages to the static page /50x.html
 | |
|       error_page   500 502 503 504  /50x.html;
 | |
| 
 | |
|       set_real_ip_from 127.0.0.1;
 | |
|       real_ip_header proxy_protocol;
 | |
|     '';
 | |
|   };
 | |
| }
 |