emily 2c3607f17c
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
fix: prevent HAProxy from reusing stale keep-alive conns to nginx/Nextcloud
DAVx5 (CalDAV/CardDAV) on greg's phone was intermittently failing every
sync type (CONTACTS/EVENTS/TASKS/RefreshCollectionsWorker) against
next.thehellings.com with:

  java.io.IOException: unexpected end of stream
  Caused by: java.io.EOFException: \n not found: limit=0

This is the classic OkHttp/HTTP client signature of the far end
silently closing a pooled keep-alive connection: the client reuses a
socket it still believes is open, gets zero bytes back while reading
response headers, and throws exactly this exception.

Root cause: HAProxy's 'next' backend proxies to nginx on
127.0.0.1:8080, and HAProxy defaults to end-to-end keep-alive (both
client- and server-side) unless told otherwise. nginx's
keepalive_timeout is 65s, so any HAProxy<->nginx connection idle past
that gets closed by nginx without HAProxy's knowledge. A request that
lands on that now-dead pooled connection right after gets nothing back
- surfacing to the client as a bare socket EOF while reading headers.
The frontend's existing 'option http-server-close'/'http-keep-alive'
pair only governs the client-facing side of HAProxy and does nothing
for the HAProxy->nginx leg.

Fix:
- backend next: add 'option http-server-close' so HAProxy opens a
  fresh connection to nginx per request instead of pooling/reusing
  one. The backend is localhost, so the extra TCP handshake cost is
  negligible, and this removes the whole class of stale-connection EOF
  errors.
- defaults: add 'timeout http-keep-alive 30s' to bound how long an
  idle client-facing keep-alive connection is held open. Previously
  unset, it fell back to 'timeout client' (500s) - unnecessarily long
  given maxconn is only 80, and tightens client-side connection churn
  to be more predictable too.

Diagnosed by pulling the nginx_access journal (enabled in #37/#38) for
the failing sync window and cross-referencing nginx's
services.nginx.appendHttpConfig / generated nginx.conf keepalive
settings against HAProxy's request-level defaults. Could not run
'haproxy -c'/'nginx -t' locally (no toolchain in the agent sandbox) -
recommend confirming via CI/garnix before merge, same as #38.
2026-08-09 22:21:20 -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%