¿Cómo le digo a Nginx que espere varios segundos antes de servir un activo?

14

Entonces, cuando estoy probando localmente cosas como Ajax en las aplicaciones que estoy escribiendo, a menudo me gusta agregar un retraso en los scripts del lado del servidor usando una sleepdeclaración. Ayuda a simular conexiones lentas, etc.

¿Hay alguna manera de especificar un comportamiento de retraso similar directamente en la configuración de Nginx que funcione para los archivos HTML planos que sirve?

Soy consciente de que puedes hacer una simulación de retraso similar a nivel de red (mira aquí ), pero parece bastante desordenada y nunca me ha funcionado muy bien.

BaronVonKaneHoffen
fuente
¿No crees que sería aún más complicado con Nginx?
DukeLion

Respuestas:

3

Me gustaría agregar a la respuesta de astlock que si desea responder con claridad,return tenga en cuenta que hay una advertencia: debe usar echo, no una returndirectiva estándar , después echo_sleepde responder con retraso, como este:

location = /slow-reply {
  echo_sleep 5.0;
  #return 200 'this response would NOT be delayed!';      
  echo 'this text will come in response body with HTTP 200 after 5 seconds';
}

(Probado en openresty / 1.7.10.2)

Greg Dubicki
fuente
0

Dando una explicación más detallada de cómo podría usar el módulo echo:

Si está comenzando desde una configuración básica, que carga archivos estáticos y archivos PHP, con algo como esto:

location ~ \.php$ {
    include fastcgi.conf;
    fastcgi_pass php;
}

Eso se puede convertir en algo como esto para agregar un retraso a las solicitudes estáticas y PHP:

# Static files
location / {
    echo_sleep 5;
    echo_exec @default;
}
location @default {}

// PHP files
location ~ \.php$ {
    echo_sleep 5;
    echo_exec @php;
}
location @php {
    include fastcgi.conf;
    fastcgi_pass php;
}

Obviamente, esto se puede modificar para cualquier cosa que desee. Básicamente, mueva cada bloque de ubicación a una ubicación @ con nombre. Luego use echo_sleepy echo_execen el bloque de ubicación original.

Sam Bull
fuente
-1

puede configurar un servidor de fondo para recibir la solicitud y luego retrasar la respuesta en el servidor. Nginx proxy de la solicitud al servidor de fondo.

usuario387318
fuente
-3

No hay forma (IHMO) de retrasar la respuesta de nginx. Debe habilitar su aplicación, no su servidor web, para habilitar dicha función.

sordo
fuente