Wie kann ich Nginx anweisen, einige Sekunden zu warten, bevor ein Asset geliefert wird?

14

Wenn ich also lokal Dinge wie Ajax in Apps teste, die ich schreibe, füge ich häufig mithilfe einer sleepAnweisung eine Verzögerung bei serverseitigen Skripten hinzu . Es hilft, langsame Verbindungen usw. zu simulieren.

Gibt es eine Möglichkeit, ein ähnliches Verzögerungsverhalten direkt in der Nginx-Konfiguration anzugeben, das für die von ihr bereitgestellten flachen HTML-Dateien funktionieren würde?

Ich bin mir bewusst, dass Sie eine ähnliche Verzögerungssimulation auf Netzwerkebene durchführen können (siehe hier ), aber es scheint ziemlich chaotisch zu sein und hat bei mir nie sehr gut funktioniert.

BaronVonKaneHoffen
quelle
Glaubst du nicht, dass es mit Nginx noch chaotischer wird?
DukeLion

Antworten:

2

Ich möchte hinzufügen astlock Antwort , dass , wenn Sie mit einem einfachen antworten möchten , returndann beachten Sie, dass es ein Nachteil ist: Sie haben Gebrauch echo, keine returnStandardrichtlinie, nach echo_sleepreagieren mit einer Verzögerung, wie folgt aus :

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

(Geprüft auf openresty / 1.7.10.2)

Greg Dubicki
quelle
0

Geben Sie eine ausführlichere Erklärung, wie Sie das Echo-Modul verwenden können:

Wenn Sie von einer Basiskonfiguration aus starten, werden statische Dateien und PHP-Dateien mit etwa folgendem Inhalt geladen:

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

Das kann dann in so etwas umgewandelt werden, um eine Verzögerung sowohl für statische als auch für PHP-Anforderungen hinzuzufügen:

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

Dies kann natürlich für alles, was Sie wollen, geändert werden. Verschieben Sie grundsätzlich jeden Positionsblock in eine benannte @Lage. Verwenden Sie dann echo_sleepund echo_execim ursprünglichen Adressblock.

Sam Bull
quelle
-1

Sie können einen Back-End-Server so einrichten, dass er die Anforderung empfängt, und die Antwort auf dem Server verzögern. Nginx Proxy die Anfrage an den Backend-Server.

user387318
quelle
-3

Es gibt keine Möglichkeit (IHMO), die Antwort von Nginx zu verzögern. Sie müssen Ihre Anwendung und nicht Ihren Webserver überarbeiten, um diese Funktion zu aktivieren.

taub
quelle