Reglas de edge

Reglas de edge

Redirecciones, encabezados de respuesta y CORS, páginas de error y mantenimiento, enrutamiento por ruta, tus propios certificados, contraseñas, reglas de IP, límites de tasa, bloqueo por país y un WAF.

Cada servidor ejecuta un proxy web frente a sus apps. Las reglas siguientes corren ahí, antes de que una solicitud llegue a tu app. La mayoría viven en la pestaña Settings → Networking de la app y se aplican en el siguiente despliegue.

También puedes definirlas mediante la API (GET / PATCH /api/applications/:id/edge, que combina las claves que envías) o en la sección edge: de railyard.yml.

Acceso: contraseña y reglas de IP

La tarjeta Access hace tres cosas:

  • Password. Pone una contraseña en la app; funciona bien para stagings, previews y herramientas de administración.
  • IP rules. Permite o niega una dirección o rango CIDR por línea. Todos los demás reciben 403.
  • No indexing. Las direcciones por defecto y de preview ya le indican a los buscadores que no las indexen.

HTTPS

Cada dirección obtiene un certificado, y una visita en HTTP plano se redirige a HTTPS por defecto. Desactiva HTTP redirects to HTTPS solo para clientes que no pueden seguir una redirección, como dispositivos antiguos o health checkers — la app entonces también responde en HTTP plano. Se aplica en el siguiente despliegue.

Redirecciones y rewrites

Redirects and rewrites acepta una regla por línea. Las reglas se revisan en orden, y gana la primera coincidencia:

/blog/* https://blog.example.com/*{?query} 301
www.shop.example.com/promo /sale 302
/old-api/* /api rewrite
/legacy /new
  • Type: 301, 302, 307, 308 o rewrite. Por defecto es 301.
  • Host: un host delante de la ruta limita la regla a esa dirección.
  • Trailing *: traslada el resto de la ruta.
  • Rewrites sirven otra ruta de la misma app y conservan el query string.

Puedes tener hasta 100 reglas. Se desactivan durante el modo de mantenimiento.

Encabezados de respuesta y CORS

Response headers and CORS acepta una regla de encabezado por línea:

* X-Frame-Options: DENY
/api/* Cache-Control: no-store
* -X-Powered-By

Un encabezado que definas reemplaza el valor que envió tu app, y -Name elimina el encabezado. Puedes tener hasta 50 reglas.

Para CORS, lista los orígenes permitidos, luego los métodos, los encabezados, si se permiten credenciales y un max age. El proxy responde él mismo las solicitudes preflight, así que nunca llegan a la app, y otros orígenes no reciben encabezados CORS. Si la app tiene contraseña, los preflights reciben 401.

Páginas de error y mantenimiento

  • Error page: se muestra con el estado real (502, 503 o 504) cuando la app no puede responder porque se cayó, se está reiniciando o está demasiado lenta.
  • Maintenance page: reemplaza la página integrada de Railyard mientras el modo de mantenimiento está activo. Se sigue enviando con un 503.

Pega el HTML, o da una dirección y Railyard copia la página cada vez que guardas. Una página copiada puede pesar hasta 64 KB y debe estar en una dirección pública. Las páginas se sirven tal cual, así que usa URLs completas para imágenes y estilos. La tarjeta tiene un enlace de preview.

Enrutamiento por ruta

Path routing sirve esta app bajo una ruta de la dirección de otra app, como shop.example.com/api para tu API, en un solo certificado. Puedes conservar el prefijo o quitarlo.

Ambas apps deben estar en el mismo servidor. El enrutamiento entre servidores todavía no es compatible.

Tu propio certificado SSL

Settings → Domains → Your own certificates. Pega un certificado PEM, con su cadena, y una clave PEM sin cifrar. Antes de guardar, Railyard verifica que:

  • la clave coincide con el certificado;
  • el certificado es válido ahora;
  • cubre al menos una de las direcciones de la app.

El certificado y la clave se guardan cifrados, y la API nunca devuelve la clave. La tarjeta muestra la fecha de expiración, y Railyard envía un aviso a través de las reglas de app down de la app 14 días antes de que expire. Una vez que expira, el siguiente despliegue vuelve a los certificados automáticos de Let’s Encrypt. Los certificados no pueden ir en railyard.yml, porque eso pondría una clave privada en git.

API: GET / POST /api/applications/:id/certificates, DELETE …/certificates/:cert_id.

Límite de tasa (beta)

Rate limiting define solicitudes por minuto por IP de cliente. Puedes poner un límite para toda la app y agregar límites por ruta:

Whole app: 600
/login 10
/api/* 120

Una solicitud que supera el límite recibe 429 con Retry-After.

Beta: los límites de tasa necesitan la imagen propia del edge proxy de Railyard en el servidor, y esa imagen todavía se está desplegando de forma gradual. Hasta que tu servidor la tenga, las reglas se guardan pero no se aplican, y tanto la tarjeta como el log de despliegue lo indican.

Otros límites:

  • Los contadores viven en la memoria de cada servidor, así que una app en varios servidores obtiene el límite por servidor.
  • Detrás de Cloudflare u otro proxy, cada visitante parece tener la IP de ese proxy, y todavía no se pueden configurar proxies de confianza.

Bloqueo por país (beta)

Countries acepta códigos de país de dos letras en dos listas, allow only y block. UNK cubre direcciones sin país conocido.

  • Los visitantes bloqueados reciben 403, antes de los límites de tasa, las redirecciones o tu app.
  • Las direcciones privadas e internas siempre pasan.
  • Los datos de país vienen de DB-IP Lite.

Necesita la misma imagen de edge proxy que el rate limiting, así que hoy las reglas se guardan pero no se aplican. Aplica la misma limitación de Cloudflare.

Firewall de aplicaciones web (beta)

Web application firewall pasa cada solicitud por el OWASP Core Rule Set (inyección SQL, XSS y las demás categorías de CRS) antes de que llegue a la app. Define el modo: Off (sin verificaciones), Detect (se registra, nunca bloquea — úsalo primero para ver qué habría detenido) o Block (aplicado, devuelve 403). Se aplica en el siguiente despliegue; una solicitud bloqueada aparece en los logs de la app como cualquier otro bloqueo de edge.

Necesita la misma imagen de edge proxy que el rate limiting y el bloqueo por país, así que hasta que tu servidor la tenga, la configuración se guarda pero no se aplica, y la tarjeta lo indica.

Cloudflare y red privada

Poner el CDN y el WAF de Cloudflare frente a la dirección propia de una app, la malla privada entre apps, y un solo certificado para todo un dominio wildcard se cubren en Networking.

Dominios personalizados

Agregar dominios, los pares www y dominio apex, subdominios wildcard y la verificación de propiedad se cubren en Domains.