Jak powiedzieć Nginx, aby poczekał kilka sekund przed podaniem zasobu?

14

Więc kiedy testuję lokalnie takie rzeczy, jak Ajax w aplikacjach, które piszę, często lubię dodawać opóźnienie w skryptach po stronie serwera za pomocą sleepinstrukcji. Pomaga symulować wolne połączenia itp.

Czy istnieje sposób, aby określić podobne zachowanie opóźnienia bezpośrednio w konfiguracji Nginx, które działałoby dla płaskich plików HTML, które obsługuje?

Wiem, że możesz przeprowadzić podobną symulację opóźnienia na poziomie sieci (patrz tutaj ), ale wydaje się dość niechlujna i nigdy nie działała dla mnie zbyt dobrze.

BaronVonKaneHoffen
źródło
Nie sądzisz, że z Nginx byłoby jeszcze bardziej niechlujnie?
DukeLion,

Odpowiedzi:

3

Chciałbym dodać do odpowiedzi astlock jest , że jeśli chcesz, aby odpowiedzieć za pomocą zwykłego returnnastępnie zauważyć, że istnieje pewien wyjątek: ty masz do wykorzystania echo, a nie standardową returndyrektywy po echo_sleepreagować z opóźnieniem, podobnie jak to:

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

(Testowany na openresty / 1.7.10.2)

Greg Dubicki
źródło
0

Podając bardziej szczegółowe wyjaśnienie, w jaki sposób możesz użyć modułu echa:

Jeśli zaczynasz od podstawowej konfiguracji, która ładuje pliki statyczne i pliki PHP, z czymś takim:

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

Można to następnie przekonwertować na coś takiego, aby dodać opóźnienie zarówno do żądań statycznych, jak i 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;
}

Można to oczywiście zmodyfikować w dowolny sposób. Zasadniczo przenieś każdy blok lokalizacji do nazwanej @lokalizacji. Następnie użyj echo_sleepiw echo_execoryginalnym bloku lokalizacji.

Sam Bull
źródło
-1

możesz ustawić serwer zaplecza na otrzymywanie żądania, a następnie opóźnić odpowiedź na serwerze. Nginx proxy zapytanie do serwera zaplecza.

użytkownik387318
źródło
-3

Nie ma sposobu (IHMO) na opóźnienie odpowiedzi od nginx. Aby włączyć taką funkcję, musisz przerobić aplikację, a nie serwer WWW.

deagh
źródło