70 lines
1.7 KiB
Nix
70 lines
1.7 KiB
Nix
{ pkgs, lib, config, ... }:
|
|
let
|
|
domain = config.networking.domain;
|
|
dataDir = "/var/www/${domain}";
|
|
mkWellKnown = data: ''
|
|
default_type application/json;
|
|
add_header Access-Control-Allow-Origin *;
|
|
return 200 '${builtins.toJSON data}';
|
|
'';
|
|
in {
|
|
services.nginx.virtualHosts."${domain}" = {
|
|
forceSSL = true;
|
|
enableACME = true;
|
|
acmeRoot = null;
|
|
root = "${dataDir}";
|
|
|
|
locations."/favicon.ico".extraConfig = ''
|
|
log_not_found off;
|
|
access_log off;
|
|
'';
|
|
|
|
locations."/".extraConfig = ''
|
|
index index.html;
|
|
'';
|
|
|
|
locations."~* \.(jpe?g|png)$".extraConfig = ''
|
|
set $red Z;
|
|
|
|
if ($http_accept ~* "webp") {
|
|
set $red A;
|
|
}
|
|
|
|
if (-f $document_root/webp/$request_uri.webp) {
|
|
set $red "''${red}B";
|
|
}
|
|
|
|
if ($red = "AB") {
|
|
add_header Vary Accept;
|
|
rewrite ^ /webp/$request_uri.webp;
|
|
}
|
|
'';
|
|
|
|
locations."~* \.(js|jpg|gif|png|webp|css|woff2)$".extraConfig = ''
|
|
expires 365d;
|
|
add_header Pragma "public";
|
|
add_header Cache-Control "public";
|
|
'';
|
|
|
|
locations."~ [^/]\.php(/|$)".extraConfig = ''
|
|
deny all;
|
|
'';
|
|
|
|
# matrix
|
|
locations."= /.well-known/matrix/server".extraConfig = mkWellKnown { "m.server" = "matrix.cloonar.com:443"; };
|
|
locations."= /.well-known/matrix/client".extraConfig = mkWellKnown { "m.homeserver".base_url = "https://matrix.cloonar.com"; };
|
|
};
|
|
users.users."${domain}" = {
|
|
isNormalUser = true;
|
|
createHome = true;
|
|
home = dataDir;
|
|
homeMode= "770";
|
|
#home = "/home/${domain}";
|
|
group = "nginx";
|
|
openssh.authorizedKeys.keys = [
|
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKKJEgyfKyz5sf5GT0HYXiDmf36fnLe/exbXbRpsNJi"
|
|
];
|
|
};
|
|
users.groups.${domain} = {};
|
|
}
|