Come faccio a dire a Nginx di attendere alcuni secondi prima di servire una risorsa?


14

Quindi, quando collaudo localmente cose come Ajax nelle app che sto scrivendo, spesso mi piace aggiungere un ritardo negli script lato server usando sleepun'istruzione. Aiuta a simulare connessioni lente ecc.

C'è un modo per specificare un simile comportamento di ritardo direttamente nella configurazione di Nginx che funzionerebbe per i file HTML piatti che sta servendo?

Sono consapevole che puoi simulare un ritardo simile a livello di rete (vedi qui ) ma sembra piuttosto disordinato e non ha mai funzionato molto bene per me.


Non pensi che sarebbe ancora più complicato con Nginx?
DukeLion,

Risposte:



3

Vorrei aggiungere alla risposta di astlock che se si desidera rispondere con una semplice returnnota poi che c'è un avvertimento: si deve usare echo, non è uno standard returndirettiva, dopo echo_sleepdi rispondere con un ritardo, in questo modo:

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';
}

(Testato su openresty / 1.7.10.2)


0

Fornendo una spiegazione più dettagliata di come è possibile utilizzare il modulo echo:

Se stai partendo da una configurazione di base, che carica file statici e file PHP, con qualcosa del genere:

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

Che può quindi essere convertito in qualcosa del genere per aggiungere un ritardo alle richieste sia statiche che 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;
}

Questo può ovviamente essere modificato per qualsiasi cosa tu voglia. Fondamentalmente, spostare ciascun blocco di posizione in una posizione @ denominata. Quindi utilizzare echo_sleepe echo_execnel blocco posizione originale.


-1

è possibile impostare un server back-end per ricevere la richiesta, quindi ritardare la risposta nel server. Nginx proxy la richiesta al server back-end.


-3

Non è possibile (IHMO) ritardare la risposta di nginx. È necessario rielaborare l'applicazione e non il server Web per abilitare tale funzione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.