# Journal du proxy : erreurs seulement, et SANS adresse réseau, en-têtes, adresse demandée ni détails de connexion (un navigateur qui coupe sa
# connexion produit sinon un avertissement qui contiendrait tout cela). Aucun journal d'accès.
{
	log {
		output stderr
		level ERROR
		format filter {
			wrap json
			request>remote_ip delete
			request>remote_port delete
			request>client_ip delete
			request>headers delete
			request>uri delete
			request>tls delete
		}
	}
}

# Proxy HTTPS (certificats Let's Encrypt automatiques, renouvelés seuls). DOMAIN vient de deploy/.env.production.
{$DOMAIN} {
	# Aucun journal d'accès : ni adresse réseau, ni pages visitées ne sont consignées (seules les erreurs du proxy le sont, sans adresse réseau ni en-têtes).
	log {
		output discard
	}
	encode gzip zstd
	# Les vidéos font jusqu'à 40 Mo ; l'application refuse elle-même tout autre corps de plus de 10 Mo.
	request_body {
		max_size 102MB
	}
	# Code source public (dépôt git servi en fichiers statiques, lecture seule) : https://<domaine>/code/
	redir /code /code/ permanent
	handle_path /code/* {
		root * /srv/code
		file_server
	}
	handle {
		reverse_proxy app:3000 {
			# Transmet l'adresse du client (limitation de débit par adresse) et le protocole.
			header_up X-Forwarded-For {remote_host}
			header_up X-Forwarded-Proto {scheme}
		}
	}
}

# Serveur audio de la radio : WebSocket sécurisé (wss://radio.<domaine>).
radio.{$DOMAIN} {
	log {
		output discard
	}
	reverse_proxy livekit:7880
}
