selfprivacy-nixos-config/webserver/nginx.nix

63 lines
2.5 KiB
Nix
Raw Normal View History

{ config, lib, ... }:
2021-11-15 12:02:05 +02:00
let
domain = config.selfprivacy.domain;
2021-11-15 12:02:05 +02:00
in
{
services.nginx = {
enable = true;
recommendedGzipSettings = true;
recommendedOptimisation = true;
recommendedProxySettings = true;
recommendedTlsSettings = true;
2021-12-17 19:17:23 +02:00
sslProtocols = lib.mkForce "TLSv1.2 TLSv1.3";
sslCiphers = lib.mkForce "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:!SHA1:!SHA256:!SHA384:!DSS:!aNULL";
2021-11-15 12:02:05 +02:00
clientMaxBodySize = "1024m";
2021-12-17 19:17:23 +02:00
commonHttpConfig = ''
map $scheme $hsts_header {
https "max-age=31536000; includeSubdomains; preload";
}
proxy_headers_hash_bucket_size 128;
proxy_headers_hash_max_size 512;
2021-12-17 19:17:23 +02:00
'';
2021-11-15 12:02:05 +02:00
virtualHosts = {
"${domain}" = {
2023-12-18 23:07:05 +02:00
sslCertificate = "/var/lib/acme/wildcard-${domain}/fullchain.pem";
sslCertificateKey = "/var/lib/acme/wildcard-${domain}/key.pem";
2021-11-15 12:02:05 +02:00
forceSSL = true;
2021-12-17 19:17:23 +02:00
extraConfig = ''
add_header Strict-Transport-Security $hsts_header;
#add_header Content-Security-Policy "script-src 'self'; object-src 'none'; base-uri 'none';" always;
2021-12-17 19:17:23 +02:00
add_header 'Referrer-Policy' 'origin-when-cross-origin';
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
proxy_cookie_path / "/; secure; HttpOnly; SameSite=strict";
expires 10m;
'';
2021-11-15 12:02:05 +02:00
};
"api.${domain}" = {
2023-12-18 23:07:05 +02:00
sslCertificate = "/var/lib/acme/wildcard-${domain}/fullchain.pem";
sslCertificateKey = "/var/lib/acme/wildcard-${domain}/key.pem";
2021-11-15 12:02:05 +02:00
forceSSL = true;
2021-12-17 19:17:23 +02:00
extraConfig = ''
add_header Strict-Transport-Security $hsts_header;
#add_header Content-Security-Policy "script-src 'self'; object-src 'none'; base-uri 'none';" always;
2021-12-17 19:17:23 +02:00
add_header 'Referrer-Policy' 'origin-when-cross-origin';
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
proxy_cookie_path / "/; secure; HttpOnly; SameSite=strict";
expires 10m;
'';
2021-11-15 12:02:05 +02:00
locations = {
"/" = {
proxyPass = "http://127.0.0.1:5050";
proxyWebsockets = true;
2021-11-15 12:02:05 +02:00
};
};
};
};
};
}