upstream the strong serve remote received reading quiere que invalid from error direccion decir caching proxy mobile nginx squid

caching - the - reason strong error reading from remote server



¿Algún proxy HTTP con soporte explícito y configurable para el búfer de solicitud/respuesta y las conexiones retrasadas? (5)

Cuando se trata de clientes móviles, es muy común tener retrasos de varios segundos durante la transmisión de solicitudes HTTP. Si está sirviendo páginas o servicios de un Apache prefor, los procesos secundarios estarán atados durante segundos a un solo cliente móvil, incluso si la lógica del servidor de su aplicación se realiza en 5 ms. Estoy buscando un servidor HTTP, equilibrador o servidor proxy que admita lo siguiente:

  1. Una solicitud llega al proxy. El proxy comienza a almacenar en la memoria RAM o en el disco la solicitud, incluidos los encabezados y los cuerpos POST / PUT. El proxy NO abre una conexión al servidor backend. Esta es probablemente la parte más importante.

  2. El servidor proxy detiene el almacenamiento en búfer de la solicitud cuando:

    • Se ha alcanzado un límite de tamaño (por ejemplo, 4 KB) o
    • La solicitud ha sido recibida por completo, encabezados y cuerpo
  3. Solo ahora, con (parte de) la solicitud en la memoria, se abre una conexión en el back-end y la solicitud se retransmite.

  4. El backend devuelve la respuesta. De nuevo, el servidor proxy comienza a almacenarlo inmediatamente (hasta un tamaño más generoso, digamos 64 KB).

  5. Dado que el proxy tiene un búfer lo suficientemente grande, la respuesta del servidor se almacena por completo en el servidor proxy en cuestión de milisegundos, y el proceso / subproceso de back-end es libre de procesar más solicitudes. La conexión backend se cierra inmediatamente.

  6. El proxy devuelve la respuesta al cliente móvil, tan rápido o tan lento como sea posible, sin tener una conexión con los recursos de inmovilización de back-end.

Estoy bastante seguro de que puedes hacer 4-6 con Squid, y nginx parece ser compatible con 1-3 (y parece bastante único a este respecto). Mi pregunta es: ¿hay algún servidor proxy que simpatice con estas capacidades de almacenamiento en búfer y de conexiones que no se abren hasta que estén listas? ¿Tal vez hay un poco de config-fu de Apache que hace que este comportamiento de almacenamiento en búfer sea trivial? ¿Alguno de ellos que no es un dinosaurio como Squid y que soporta un modelo de ejecución simple basado en eventos asincrónico y sencillo?

(Siderant: Usaría nginx pero no es compatible con cuerpos POST fragmentados, por lo que es inútil para servir cosas a clientes móviles. Sí barato 50 $ teléfonos encanta POSTs fragmentados ... suspiro)


Desafortunadamente, no estoy al tanto de una solución preparada para esto. En el peor de los casos, considere desarrollarlo usted mismo, digamos, usando Java NIO, no debería llevar más de una semana.


¿Qué hay de usar tanto nginx como Squid (cliente - Squid - nginx - backend)? Al devolver datos desde un backend, Squid lo convierte de CTE: fragmentado a un flujo regular con Content-Length establecido, por lo que quizás también pueda normalizar POST.



Squid 2.7 puede admitir 1-3 con un parche:

Probé esto y encontré que funciona bien, con la condición de que solo almacena en memoria intermedia, no en el disco (a menos que intercambie, por supuesto, y no lo desee), por lo que debe ejecutarlo en una caja eso está adecuadamente aprovisionado para su carga de trabajo.

Los POST fragmentados son un problema para la mayoría de los servidores e intermediarios. ¿Estás seguro de que necesitas ayuda? Por lo general, los clientes deben volver a intentar la solicitud cuando obtienen un 411.


Fiddler , una herramienta gratuita de Telerik, hace al menos algunas de las cosas que estás buscando.

Específicamente, ve a Rules | Custom Rules... Rules | Custom Rules... y puede agregar código Javascript arbitrario en todos los puntos durante la conexión. Puede simular algunas de las cosas que necesita con llamadas sleep() .

Sin embargo, no estoy seguro de que este método te brinde el control preciso de búfer que deseas. Aún así, ¿algo podría ser mejor que nada?