109 lines
3.7 KiB
Nix
109 lines
3.7 KiB
Nix
![]() |
{ config, lib, pkgs, ...}: {
|
||
|
services.caddy = {
|
||
|
enable = true;
|
||
|
# acmeCA = "https://acme-v02.api.letsencrypt.org/directory";
|
||
|
acmeCA = "https://acme-staging-v02.api.letsencrypt.org/directory";
|
||
|
globalConfig = ''
|
||
|
email ataraxiadev@ataraxiadev.com
|
||
|
'';
|
||
|
virtualHosts = let
|
||
|
# default = {
|
||
|
# useACMEHost = "ataraxiadev.com";
|
||
|
# };
|
||
|
in {
|
||
|
"ataraxiadev.com" = {
|
||
|
serverAliases = [ "www.ataraxiadev.com" ];
|
||
|
# listenAddresses = [ "0.0.0.0" ];
|
||
|
extraConfig = ''
|
||
|
templates
|
||
|
encode gzip zstd
|
||
|
root * /srv/www/ataraxiadev.com
|
||
|
file_server
|
||
|
'';
|
||
|
};
|
||
|
"matrix.ataraxiadev.com" = {
|
||
|
extraConfig = ''
|
||
|
@identity {
|
||
|
path /_matrix/identity/*
|
||
|
}
|
||
|
@noidentity {
|
||
|
not path /_matrix/identity/*
|
||
|
}
|
||
|
@search {
|
||
|
path /_matrix/client/r0/user_directory/search/*
|
||
|
}
|
||
|
@nosearch {
|
||
|
not path /_matrix/client/r0/user_directory/search/*
|
||
|
}
|
||
|
@static {
|
||
|
path /matrix/static-files/*
|
||
|
}
|
||
|
@nostatic {
|
||
|
not path /matrix/static-files/*
|
||
|
}
|
||
|
@wellknown {
|
||
|
path /.well-known/matrix/*
|
||
|
}
|
||
|
header {
|
||
|
# Enable HTTP Strict Transport Security (HSTS) to force clients to always connect via HTTPS
|
||
|
# Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
|
||
|
# Enable cross-site filter (XSS) and tell browser to block detected attacks
|
||
|
X-XSS-Protection "1; mode=block"
|
||
|
# Prevent some browsers from MIME-sniffing a response away from the declared Content-Type
|
||
|
X-Content-Type-Options "nosniff"
|
||
|
# Disallow the site to be rendered within a frame (clickjacking protection)
|
||
|
X-Frame-Options "DENY"
|
||
|
# X-Robots-Tag
|
||
|
X-Robots-Tag "noindex, noarchive, nofollow"
|
||
|
}
|
||
|
# Cache
|
||
|
header @static {
|
||
|
# Cache
|
||
|
Cache-Control "public, max-age=31536000"
|
||
|
defer
|
||
|
}
|
||
|
# identity
|
||
|
handle @identity {
|
||
|
reverse_proxy localhost:8090 {
|
||
|
header_up X-Forwarded-Port {http.request.port}
|
||
|
header_up X-Forwarded-Proto {http.request.scheme}
|
||
|
header_up X-Forwarded-TlsProto {tls_protocol}
|
||
|
header_up X-Forwarded-TlsCipher {tls_cipher}
|
||
|
header_up X-Forwarded-HttpsProto {proto}
|
||
|
}
|
||
|
}
|
||
|
# search
|
||
|
handle @search {
|
||
|
reverse_proxy localhost:8090 {
|
||
|
header_up X-Forwarded-Port {http.request.port}
|
||
|
header_up X-Forwarded-Proto {http.request.scheme}
|
||
|
header_up X-Forwarded-TlsProto {tls_protocol}
|
||
|
header_up X-Forwarded-TlsCipher {tls_cipher}
|
||
|
header_up X-Forwarded-HttpsProto {proto}
|
||
|
}
|
||
|
}
|
||
|
handle @wellknown {
|
||
|
encode zstd gzip
|
||
|
root * /matrix/static-files
|
||
|
header Cache-Control max-age=14400
|
||
|
header Content-Type application/json
|
||
|
header Access-Control-Allow-Origin *
|
||
|
file_server
|
||
|
}
|
||
|
handle {
|
||
|
encode zstd gzip
|
||
|
reverse_proxy localhost:8008 {
|
||
|
header_up X-Forwarded-Port {http.request.port}
|
||
|
header_up X-Forwarded-Proto {http.request.scheme}
|
||
|
header_up X-Forwarded-TlsProto {tls_protocol}
|
||
|
header_up X-Forwarded-TlsCipher {tls_cipher}
|
||
|
header_up X-Forwarded-HttpsProto {proto}
|
||
|
}
|
||
|
}
|
||
|
'';
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
users.users.caddy.extraGroups = [ "acme" ];
|
||
|
}
|