clientAddress
función Since 1.7.0
IP del cliente de una petición (desde 1.7), con la misma política que context.clientAddress
y rateLimit: la de la conexión que entrega el adaptador (el socket en Node, Bun y Deno;
CF-Connecting-IP en Workers) o, con MEEKO_TRUST_PROXY, la entrada de X-Forwarded-For que
añadió el proxy de confianza más externo (la n-ésima desde la derecha), sin su puerto. Sin
MEEKO_TRUST_PROXY, X-Forwarded-For nunca se lee, porque cualquier cliente puede enviarlo.
Con MEEKO_TRUST_PROXY=cloudflare (desde 1.8), tras Cloudflare Tunnel (cloudflared) y un
proxy como Traefik, es la IP de CF-Connecting-IP (o, si falta, de True-Client-IP), pero sólo
si la conexión y cada salto de X-Forwarded-For vienen de las redes de MEEKO_TRUSTED_PROXIES
(por defecto, loopback y redes privadas). Si un salto viene de fuera, ese salto es el cliente; si
la conexión viene de fuera o la cabecera no es una única IP, la de la conexión.
Sirve donde no hay RequestContext, como en defineServerMiddleware o en el handler de
addServerHandler de un módulo; en el resto, use context.clientAddress.
Sin env, aplica el MEEKO_TRUST_PROXY del entorno (platform.env) de la aplicación que atiende
la petición, también en la petición nueva que un middleware pasa a next(). Una petición que no
atiende un ServerApp sólo usa la IP de la conexión, salvo que reciba env.
import { clientAddress } from "@meekojs/meeko/server";Source code src/server/runtime/request-context.ts:112
Firma #
function clientAddress(request: Request, env?: unknown): string | undefinedParameters #
-
requestRequest Petición que recibe el middleware o el handler.
-
envunknownoptional Entorno del que leer
MEEKO_TRUST_PROXYyMEEKO_TRUSTED_PROXIES, comoprocess.env; por defecto, el de la aplicación que atiende la petición.
Returns #
-
string | undefined La IP normalizada (IPv6 en minúsculas, IPv4 mapeada como IPv4), o
undefinedsi no se conoce.
Throws #
-
TypeError Si
MEEKO_TRUST_PROXYoMEEKO_TRUSTED_PROXIESno son válidas.
Example #
// server/middleware/10-visitor.ts
import { clientAddress, defineServerMiddleware } from "@meekojs/meeko/server";
export default defineServerMiddleware((request, next) => {
// Tras Traefik con MEEKO_TRUST_PROXY=1, la IP del cliente y no la del proxy.
const ip = clientAddress(request) ?? "desconocida";
console.log(`${request.method} ${new URL(request.url).pathname} desde ${ip}`);
return next();
});See also #
- Client IP behind a proxy Framework full-stack