nixos-config/hosts/falkenstein/modules/nginx/default.nix

111 lines
3.4 KiB
Nix
Raw Normal View History

2023-12-01 15:07:47 +01:00
{ config, lib, pkgs, ... }:
2023-04-12 17:21:24 +02:00
{
2023-11-16 01:27:01 +01:00
# set default options for virtualHosts
options = with lib; {
services.nginx.virtualHosts = mkOption {
type = types.attrsOf (types.submodule
({ name, ... }: {
2023-12-23 17:30:04 +01:00
# enable http3 for all hosts
quic = true;
http3 = true;
2023-11-16 01:27:01 +01:00
# split up nginx access logs per vhost
extraConfig = ''
access_log /var/log/nginx/${name}_access.log;
error_log /var/log/nginx/${name}_error.log;
'';
})
);
2023-05-24 16:37:45 +02:00
};
2023-05-05 23:43:40 +02:00
};
2023-11-16 01:27:01 +01:00
config =
let
# matrix homeserver discovery
matrix_domain = "matrix.${config.networking.domain}";
serverConfig = {
"m.server" = "${matrix_domain}:443";
};
clientConfig = {
"m.homeserver" = {
base_url = "https://${matrix_domain}";
# server_name = config.networking.domain;
};
"org.matrix.msc3575.proxy" = {
url = "https://${matrix_domain}";
};
};
mkWellKnown = data: ''
add_header Content-Type application/json;
add_header Access-Control-Allow-Origin *;
return 200 '${builtins.toJSON data}';
'';
2023-12-01 15:07:47 +01:00
user = "rfive-web";
group = "rfive-web";
2023-11-16 01:27:01 +01:00
in
{
2023-12-01 15:07:47 +01:00
users.users.${user} = {
group = group;
isSystemUser = true;
};
users.groups.${group} = { };
services.phpfpm.pools.rfivede = {
user = user;
group = group;
settings = {
"listen.owner" = config.services.nginx.user;
"pm" = "dynamic";
"pm.max_children" = 32;
"pm.max_requests" = 500;
"pm.start_servers" = 2;
"pm.min_spare_servers" = 2;
"pm.max_spare_servers" = 5;
"php_admin_value[error_log]" = "stderr";
"php_admin_flag[log_errors]" = true;
"catch_workers_output" = true;
};
phpEnv."PATH" = lib.makeBinPath [ pkgs.php ];
};
2023-11-16 01:27:01 +01:00
networking.firewall.allowedTCPPorts = [ 80 443 ];
2023-12-19 22:42:38 +01:00
networking.firewall.allowedUDPPorts = [ 443 ];
2023-11-16 01:27:01 +01:00
services.nginx = {
enable = true;
2023-12-19 22:42:38 +01:00
package = pkgs.nginxQuic;
2023-11-16 01:27:01 +01:00
recommendedTlsSettings = true;
recommendedProxySettings = true;
recommendedGzipSettings = true;
recommendedOptimisation = true;
virtualHosts."${config.networking.domain}" = {
enableACME = true;
forceSSL = true;
root = "/srv/web/${config.networking.domain}";
2023-12-01 15:07:47 +01:00
extraConfig = ''
index index.html index.php;
'';
locations = {
"/" = {
tryFiles = "$uri $uri/ /index.php?$query_string";
};
"~ \.php$" = {
extraConfig = ''
try_files $uri =404;
fastcgi_pass unix:${config.services.phpfpm.pools.rfivede.socket};
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
include ${pkgs.nginx}/conf/fastcgi_params;
include ${pkgs.nginx}/conf/fastcgi.conf;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
'';
};
"/.well-known/matrix/client".extraConfig = mkWellKnown clientConfig;
"/.well-known/matrix/server".extraConfig = mkWellKnown serverConfig;
};
2023-11-16 01:27:01 +01:00
};
};
security.acme = {
acceptTerms = true;
defaults = {
email = "rouven@${config.networking.domain}";
};
};
2023-04-12 17:21:24 +02:00
};
}