all the broken
This commit is contained in:
79
modules/server/nginx/default.nix
Normal file
79
modules/server/nginx/default.nix
Normal file
@@ -0,0 +1,79 @@
|
||||
{
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
self,
|
||||
myLib,
|
||||
...
|
||||
}: let
|
||||
inherit (myLib) mkVirtualHost;
|
||||
inherit (lib) mkEnableOption mkIf types;
|
||||
|
||||
unit = "nginx";
|
||||
cfg = config.server.nginx;
|
||||
srv = config.server;
|
||||
in {
|
||||
options.server.nginx = {
|
||||
enable = mkEnableOption "Enable global NGINX reverse proxy with ACME";
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
age.secrets = {
|
||||
nginxEnv = {
|
||||
file = "${self}/secrets/nginxEnv.age";
|
||||
};
|
||||
};
|
||||
|
||||
networking.firewall.allowedTCPPorts = [80 443];
|
||||
|
||||
security = {
|
||||
acme = {
|
||||
acceptTerms = true;
|
||||
defaults.email = config.server.email;
|
||||
certs.${srv.domain} = {
|
||||
reloadServices = ["nginx.service"];
|
||||
domain = "${srv.domain}";
|
||||
extraDomainNames = ["*.${srv.domain}"];
|
||||
dnsProvider = "cloudflare";
|
||||
dnsPropagationCheck = true;
|
||||
group = config.services.nginx.group;
|
||||
environmentFile = config.age.secrets.nginxEnv.path;
|
||||
};
|
||||
};
|
||||
dhparams = {
|
||||
enable = true;
|
||||
params.nginx = {};
|
||||
};
|
||||
};
|
||||
|
||||
services.nginx = {
|
||||
enable = true;
|
||||
recommendedGzipSettings = true;
|
||||
recommendedOptimisation = true;
|
||||
recommendedProxySettings = true;
|
||||
recommendedTlsSettings = true;
|
||||
resolver.addresses = config.networking.nameservers;
|
||||
sslDhparam = config.security.dhparams.params.nginx.path;
|
||||
appendHttpConfig = ''
|
||||
proxy_headers_hash_max_size 512;
|
||||
proxy_headers_hash_bucket_size 128;
|
||||
'';
|
||||
|
||||
virtualHosts = let
|
||||
labDomain = "cnix.dev";
|
||||
labCert = {
|
||||
useACMEHost = "cnix.dev";
|
||||
forceSSL = true;
|
||||
};
|
||||
in {
|
||||
# proxies on domain with https, only accessible within local network
|
||||
"${labDomain}" =
|
||||
labCert
|
||||
// {
|
||||
locations."/".proxyPass = "http://127.0.0.1:${toString config.services.homepage-dashboard.listenPort}";
|
||||
};
|
||||
};
|
||||
};
|
||||
users.users.nginx.extraGroups = ["acme"];
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user