http - sirve - servidores web ejemplos
Cómo enviar una respuesta con HAProxy sin pasar la solicitud a los servidores web (1)
La única forma de hacerlo es en HAProxy 1.5.14 activando manualmente el error 503 (no hay servidores disponibles para manejar la solicitud) y configurando la página de error en el archivo con encabezados CORS personalizados.
backend cors_headers
errorfile 503 /path/to/custom/file.http
El file.http
debe contener los encabezados deseados y 2 líneas vacías al final
HTTP/1.1 200 OK
Access-Control-Allow-Origin: https://www.example.com
Access-Control-Max-Age: 31536000
Content-Length: 0
Cache-Control: private
<REMOVE THIS LINE COMPLETELY>
Este "método" tiene un par de limitaciones:
- no hay forma de verificar el origen antes de enviar los encabezados CORS, por lo que tendrá que tener una lista estática de orígenes permitidos o tendrá que permitir todos los orígenes
falta de encabezados dinámicos: no se puede hacer
http-response set-header Fecha% [date (), http_date]
o establece el encabezado Expires
.
Nota: si está actualizando el archivo HTTP dinámicamente a lo largo del tiempo, para aplicar los cambios a HAProxy deberá reiniciarlo. Puede ser un reinicio elegante o un reinicio duro, en cualquier caso, el nuevo archivo se cargará, almacenará en caché y se servirá de inmediato.
El servidor recibe miles de solicitudes OPTIONS debido a CORS (Intercambio de recursos de origen cruzado). En este momento, cada solicitud de opciones se envía a uno de los servidores, lo que es un poco derrochador, sabiendo que HAProxy puede agregar los encabezados CORS sin la ayuda de un servidor web.
frontend https-in
...
use_backend cors_headers if METH_OPTIONS
...
backend cors_headers
rspadd Access-Control-Allow-Origin:/ https://www.example.com
rspadd Access-Control-Max-Age:/ 31536000
Sin embargo, para que esto funcione, necesito especificar al menos un servidor en vivo en el backend cors_headers y ese servidor aún recibirá las solicitudes.
¿Cómo puedo manejar la solicitud en el back-end sin especificar ningún servidor? ¿Cómo puedo detener la propagación de la solicitud a los servidores, mientras envío la respuesta al navegador y mantengo la conexión activa?