emily 6f63b38497
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
fix: correct too-aggressive HAProxy client keep-alive timeout from #39
DAVx5 (CalDAV/CardDAV) reported the exact same 'unexpected end of
stream' / EOFException error again at 2026-08-10T04:00:58Z, roughly
15 minutes after PR #39 deployed. That PR's backend-side fix (option
http-server-close on 'backend next') is confirmed working -
journalctl/nginx access logs show a completely clean, uninterrupted
request stream on the haproxy<->nginx leg through the exact failure
timestamp.

Root cause of the recurrence: PR #39 also added 'timeout
http-keep-alive 30s' to defaults, intended as an unrelated tidy-up
given maxconn=80. That value didn't account for client-side HTTP
connection pooling: DAVx5 runs on OkHttp, which holds idle pooled
connections open for up to 5 minutes by default before evicting them.
With haproxy closing idle client-facing keep-alive connections after
just 30s, any DAVx5 connection idle between 30s-300s got silently
closed by haproxy while the client still considered it live - the
client's next reuse attempt produced exactly the same class of error,
just relocated from the haproxy<->nginx leg to the client<->haproxy
leg instead of being fixed.

Fix:
- defaults: raise 'timeout http-keep-alive' from 30s to 6m, safely
  above OkHttp's 300s (5min) idle-eviction default, so a client's own
  pool always evicts a stale connection before haproxy would.
- backend next: add 'log-tag next' so this backend's haproxy log
  lines carry a distinct syslog tag ('journalctl -t next') instead of
  being interleaved with every other backend under the shared
  'haproxy' tag - this specific incident took significant manual
  grep/awk work to isolate 'next' traffic from git/matrix/immich noise
  in the same log stream, which a dedicated tag eliminates going
  forward.

Verified by comparing haproxy's own next/nextcloud access log lines
(all showing normal termination, no CD/SD flags) against nginx's
nginx_access journal (clean, continuous, no gap) across the exact
04:00:58 UTC failure window - confirming the backend-side legs were
healthy and the failure had to be on the client<->haproxy leg instead.

Could not run 'haproxy -c' locally (no toolchain in the agent
sandbox) - recommend confirming via CI/garnix before merge, same
caveat as prior PRs in this series (#37, #38, #39).
2026-08-09 23:09:31 -05:00
2026-07-26 21:36:46 -05:00
2026-05-19 23:47:42 -05:00
2025-12-17 23:28:53 -06:00
2023-03-18 06:19:56 +00:00
2025-12-08 05:53:17 -06:00
2025-12-28 22:00:05 -06:00
2026-08-01 14:38:01 -05:00
2026-08-05 22:57:58 -05:00
2026-05-19 02:40:33 -05:00
2026-05-13 08:06:57 -05:00

This is a unified repo to contain my personal configurations for NixOS machines.

How To Use This

Go through the normal process to setup a NixOS system during installation.

  1. Boot from an appropriate medium
  2. Parition the drives
  3. Mount them
  4. Before you generate out the configuration, clone this repoistory to your /etc/nixos folder
  5. Run the configuration generator. It should only genreate the hardware-configuration.nix file, which this repo gitignores
  6. Create a folder and file with the machine name in hosts/<machine>/default.nix
  7. Add hosts/default.nix an appropriate entry for the machine you are building
  8. Create a file home/hosts/<machine>/default.nix with the new machine name as well

Adding new hosts

To add a new host, create a folder in the directory hosts/ that matches the name of the target system. Each host must contain, minimally, a default.nix file that serves as the basis of configuring that host.

Test build a VM for your system

  • nom build ".#nixosConfigurations.<host>.config.system.build.vm
  • export QEMU_NET_OPTS="hostfwd=tcp::2221-:22" to export the SSH port
  • ./result/bin/run-<host>-vm
S
Description
No description provided
Readme
30 MiB
Languages
Nix 86.5%
Go 4.4%
Vim Script 3%
Xonsh 2%
Lua 1.6%
Other 2.5%