IKHSAN
ENID Baca dalam Bahasa Indonesia

homeio

Public

Forked from doctor-io/homeio

Branch
main
Latest commit
958d74616 October 2026

keep-alive.ts

Open raw
import type { Server as HttpServer } from "node:http";

/**
 * How long nginx keeps an idle connection to Homeio open before reusing or
 * dropping it. The installer writes it into the upstream block
 * (`keepalive_timeout`); 60s is also nginx's default.
 */
export const NGINX_UPSTREAM_KEEPALIVE_MS = 60_000;

/**
 * Connections waiting to be accepted while the event loop is busy. Node's
 * default of 511 overflowed under load (thousands of drops a minute, each a
 * 502); the kernel caps it at net.core.somaxconn, 4096 on current distributions.
 */
export const LISTEN_BACKLOG = 4096;

/**
 * Node closes idle keep-alive sockets after 5s by default, but nginx reuses
 * them for up to a minute. Under load nginx then sends a request on a socket
 * Node is closing, and the visitor gets a 502 ("Connection reset by peer").
 * The side that closes idle connections must be the proxy: Node keeps them a
 * little longer than nginx does.
 */
export function configureUpstreamKeepAlive(
  server: Pick<HttpServer, "keepAliveTimeout" | "headersTimeout">,
) {
  server.keepAliveTimeout = NGINX_UPSTREAM_KEEPALIVE_MS + 5_000;
  // Node requires the header timeout to outlast the keep-alive timeout, or it
  // can drop a reused socket while the next request's headers arrive.
  server.headersTimeout = server.keepAliveTimeout + 1_000;
}
bytes
1,333
lines
32
Type
ts
Latest commit
16 October 2026