nix-infra/config/hosts/matrix/nginx.nix
yuri 3053eb9b2f Proxy to IPv4 local address
Only proxy to the local host on IPv4, because localhost doesn't seem to work
even if matrix-synapse is listening on ::1 as well.
2023-10-07 03:30:24 +02:00

65 lines
1.8 KiB
Nix

{ config, ... }:
{
services.nginx = {
enable = true;
virtualHosts."acme-matrix.hamburg.ccc.de" = {
default = true;
enableACME = true;
serverName = "matrix.hamburg.ccc.de";
listen = [
{
addr = "0.0.0.0";
port = 31820;
}
];
};
virtualHosts."matrix.hamburg.ccc.de" = {
default = true;
forceSSL = true;
useACMEHost = "matrix.hamburg.ccc.de";
listen = [
{
addr = "0.0.0.0";
port = 8443;
ssl = true;
extraParameters = [ "proxy_protocol" ];
}
{
addr = "0.0.0.0";
port = 8448;
ssl = true;
extraParameters = [ "proxy_protocol" ];
}
];
locations."~ ^(/_matrix|/_synapse/client)" = {
# Only proxy to the local host on IPv4, because localhost doesn't seem to work
# even if matrix-synapse is listening on ::1 as well.
proxyPass = "http://127.0.0.1:8008";
extraConfig = ''
# Nginx by default only allows file uploads up to 1M in size
# Increase client_max_body_size to match max_upload_size defined in homeserver.yaml
client_max_body_size ${config.services.matrix-synapse.settings.max_upload_size};
'';
};
extraConfig = ''
# Make use of the ngx_http_realip_module to set the $remote_addr and
# $remote_port to the client address and client port, when using proxy
# protocol.
# First set our proxy protocol proxy as trusted.
set_real_ip_from 172.31.17.140;
# Then tell the realip_module to get the addreses from the proxy protocol
# header.
real_ip_header proxy_protocol;
'';
};
};
networking.firewall.allowedTCPPorts = [ 8443 8448 31820 ];
}