91 lines
3.2 KiB
Nix
91 lines
3.2 KiB
Nix
{ config, pkgs, lib, ... }:
|
|
let
|
|
mkDomain = subname: "${subname}.${config.networking.fqdn}";
|
|
in
|
|
{
|
|
_module.args.mkDomain = mkDomain;
|
|
_module.args.allSubdomains = lib.pipe config.services.nginx.virtualHosts [
|
|
#(lib.mapAttrsToList (domain: vhost: [ domain ] ++ vhost.serverAliases))
|
|
(lib.mapAttrsToList (domain: vhost: [ domain ]))
|
|
lib.flatten
|
|
(builtins.filter (domain: domain != ""))
|
|
(lib.sort (x: y: x<y))
|
|
];
|
|
|
|
security.acme.acceptTerms = true;
|
|
security.acme.defaults.email = "pbsds+acme@hotmail.com"; # TODO: parametrize per host
|
|
#security.acme.defaults.renewInterval = "daily";
|
|
#security.acme.defaults.reloadServices
|
|
|
|
# https://www.xf.is/2020/06/30/list-of-free-acme-ssl-providers/
|
|
#security.acme.defaults.server = "https://acme-v02.api.letsencrypt.org/directory" # default
|
|
#security.acme.defaults.server = "https://acme-staging-v02.api.letsencrypt.org/directory"; # STAGING
|
|
#security.acme.defaults.server = "https://api.buypass.com/acme/directory"; # no wildcards, rate limit: 20 domains/week, 5 duplicate certs / week
|
|
#security.acme.defaults.server = "https://api.test4.buypass.no/acme/directory"; # STAGING. no wildcards, rate limit: 20 domains/week, 5 duplicate certs / week
|
|
|
|
# DNS-based ACME:
|
|
# - https://go-acme.github.io/lego/dns/domeneshop/
|
|
# - https://nixos.org/manual/nixos/stable/index.html#module-security-acme-config-dns-with-vhosts
|
|
#security.acme.defaults.dnsProvider = "domeneshop";
|
|
#security.acme.defaults.credentialsFile = "/var/lib/secrets/domeneshop.key"; # TODO: this file must be made by hand, containing env variables.
|
|
|
|
services.nginx.enable = true;
|
|
networking.firewall.allowedTCPPorts = [ 80 443 ];
|
|
|
|
services.nginx.recommendedGzipSettings = true;
|
|
services.nginx.recommendedOptimisation = true;
|
|
services.nginx.recommendedProxySettings = true;
|
|
services.nginx.recommendedTlsSettings = true;
|
|
|
|
# nginx return 444 for all nonexistent virtualhosts
|
|
services.nginx.virtualHosts."_" = {
|
|
addSSL = true;
|
|
sslCertificate = "${pkgs.path}/nixos/tests/common/acme/server/acme.test.cert.pem";
|
|
sslCertificateKey = "${pkgs.path}/nixos/tests/common/acme/server/acme.test.key.pem";
|
|
extraConfig = "return 444;";
|
|
};
|
|
|
|
/** /
|
|
services.nginx.virtualHosts."" = {
|
|
default = true;
|
|
forceSSL = false;
|
|
enableACME = false;
|
|
root = pkgs.writeTextDir "index.html" ''
|
|
<!DOCTYPE html>
|
|
no
|
|
'';
|
|
};
|
|
/**/
|
|
|
|
# Website tunnel
|
|
# TODO: remove
|
|
/** /
|
|
services.nginx.virtualHosts.${config.networking.fqdn} = {
|
|
forceSSL = true; # addSSL = true;
|
|
enableACME = true;
|
|
#acmeRoot = null; # use DNS
|
|
default = true;
|
|
serverAliases = map mkDomain [
|
|
"www"
|
|
#"*" # requires DNS ACME
|
|
];
|
|
# The alternative to ^ is: config.security.acme.certs."${acmeDomain}".extraDomainNames = [ (mkDomain "foo") ];
|
|
# TODO: 'nox' alias for everything
|
|
locations."/" = {
|
|
proxyPass = "http://pbuntu.pbsds.net";
|
|
proxyWebsockets = true;
|
|
};
|
|
};
|
|
#services.nginx.virtualHosts.${mkDomain "www"} = {
|
|
# addSSL = true;
|
|
# useACMEHost = acmeDomain; #enableACME = true;
|
|
# locations."/" = {
|
|
# proxyPass = "http://pbuntu.pbsds.net";
|
|
# proxyWebsockets = true;
|
|
# };
|
|
#};
|
|
/**/
|
|
|
|
|
|
}
|