nixfiles/hosts/koi/services/nginx.nix
2025-01-03 21:50:13 +03:00

95 lines
2.6 KiB
Nix

{ config, ... }:
{
desu.secrets.cloudflare-email.owner = "nginx";
desu.secrets.cloudflare-token.owner = "nginx";
services.nginx = {
enable = true;
recommendedGzipSettings = true;
recommendedOptimisation = true;
recommendedProxySettings = true;
recommendedTlsSettings = true;
statusPage = true;
enableReload = true;
commonHttpConfig = ''
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 104.16.0.0/13;
set_real_ip_from 104.24.0.0/14;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 131.0.72.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 2400:cb00::/32;
set_real_ip_from 2606:4700::/32;
set_real_ip_from 2803:f800::/32;
set_real_ip_from 2405:b500::/32;
set_real_ip_from 2405:8100::/32;
set_real_ip_from 2c0f:f248::/32;
set_real_ip_from 2a06:98c0::/29;
real_ip_header CF-Connecting-IP;
proxy_headers_hash_bucket_size 128;
'';
# default server that would reject all unmatched requests
appendHttpConfig = ''
server {
listen 80 http2 default_server;
listen 443 ssl http2 default_server;
ssl_reject_handshake on;
return 444;
}
'';
resolver = {
addresses = [ "127.0.0.1" ];
ipv6 = false;
valid = "30s";
};
proxyResolveWhileRunning = true;
# declared in the relevant service nixfiles
# virtualHosts = { ... };
};
systemd.services.nginx.after = [ "coredns.service" ];
security.acme.acceptTerms = true;
security.acme.defaults = {
dnsResolver = "8.8.8.8:53"; # coredns tends to cache these too much
email = "alina@tei.su";
group = "nginx";
dnsProvider = "cloudflare";
credentialFiles = {
"CLOUDFLARE_EMAIL_FILE" = config.desu.secrets.cloudflare-email.path;
"CLOUDFLARE_API_KEY_FILE" = config.desu.secrets.cloudflare-token.path;
};
};
security.acme.certs = {
"stupid.fish" = {
extraDomainNames = [ "*.stupid.fish" ];
};
"tei.su" = {
extraDomainNames = [ "*.tei.su" ];
};
"tei.pet" = {
extraDomainNames = [ "*.tei.pet" ];
};
"s3.stupid.fish" = {
extraDomainNames = [ "*.s3.stupid.fish" ];
};
};
users.users.nginx.extraGroups = [ "geesefs" ];
networking.firewall.allowedTCPPorts = [ 80 443 ];
}