summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--flake.nix2
-rw-r--r--usecases/server/nginx.nix56
2 files changed, 58 insertions, 0 deletions
diff --git a/flake.nix b/flake.nix
index ba8fc24..b983f2b 100644
--- a/flake.nix
+++ b/flake.nix
@@ -81,6 +81,7 @@
81 jellyfin = (import ./usecases/server/jellyfin.nix inputs); 81 jellyfin = (import ./usecases/server/jellyfin.nix inputs);
82 monitoringServer = (import ./usecases/server/monitoring-server.nix inputs); 82 monitoringServer = (import ./usecases/server/monitoring-server.nix inputs);
83 monitoringTarget = (import ./usecases/server/monitoring-target.nix inputs); 83 monitoringTarget = (import ./usecases/server/monitoring-target.nix inputs);
84 nginx = (import ./usecases/server/nginx.nix inputs);
84 radicale = (import ./usecases/server/radicale.nix inputs); 85 radicale = (import ./usecases/server/radicale.nix inputs);
85 smartd = (import ./usecases/server/smartd.nix inputs); 86 smartd = (import ./usecases/server/smartd.nix inputs);
86 zfs = (import ./usecases/server/zfs.nix inputs); 87 zfs = (import ./usecases/server/zfs.nix inputs);
@@ -179,6 +180,7 @@
179 self.nixosModules.usecases.server.hydraServer 180 self.nixosModules.usecases.server.hydraServer
180 self.nixosModules.usecases.server.jellyfin 181 self.nixosModules.usecases.server.jellyfin
181 self.nixosModules.usecases.server.monitoringServer 182 self.nixosModules.usecases.server.monitoringServer
183 self.nixosModules.usecases.server.nginx
182 self.nixosModules.usecases.server.radicale 184 self.nixosModules.usecases.server.radicale
183 self.nixosModules.usecases.server.zfs 185 self.nixosModules.usecases.server.zfs
184 186
diff --git a/usecases/server/nginx.nix b/usecases/server/nginx.nix
new file mode 100644
index 0000000..2057c87
--- /dev/null
+++ b/usecases/server/nginx.nix
@@ -0,0 +1,56 @@
1inputs:
2
3{ config, ... }:
4
5{
6 services.nginx = {
7 enable = true;
8
9 # For the prometheus exporter
10 statusPage = true;
11
12 recommendedGzipSettings = true;
13 recommendedOptimisation = true;
14 recommendedProxySettings = true;
15 recommendedTlsSettings = true;
16
17 commonHttpConfig = ''
18 # Add HSTS header with preloading to HTTPS requests.
19 # Adding this header to HTTP requests is discouraged
20 map $scheme $hsts_header {
21 https "max-age=31536000; includeSubdomains; preload";
22 }
23
24 add_header Strict-Transport-Security $hsts_header;
25
26 add_header 'Referrer-Policy' 'strict-origin-when-cross-origin';
27
28 add_header X-Frame-Options DENY;
29
30 add_header X-Content-Type-Options nosniff;
31
32 # Better to setup CSP, but nice default nonetheless
33 add_header X-XSS-Protection "1; mode=block";
34 '';
35
36 sslDhparam = config.security.dhparams.params.nginx.path;
37 };
38
39 security.dhparams = {
40 enable = true;
41 params = {
42 nginx = { };
43 };
44 };
45
46 services.prometheus.exporters.nginx = {
47 enable = true;
48 listenAddress = "${config.topology.mainVpn.currentNodeIP}";
49 };
50
51 networking.firewall.allowedTCPPorts = [ 80 443 ];
52
53 networking.firewall.interfaces.${config.topology.mainVpn.interfaceName}.allowedTCPPorts = [
54 config.services.prometheus.exporters.nginx.port
55 ];
56}