Comment dire à Nginx d'attendre un certain nombre de secondes avant de servir un élément?

14

Donc, lorsque je teste localement des choses comme Ajax dans les applications que j'écris, j'aime souvent ajouter un délai dans les scripts côté serveur à l'aide d'une sleepinstruction. Il permet de simuler des connexions lentes, etc.

Existe-t-il un moyen de spécifier un comportement de retard similaire directement dans la configuration Nginx qui fonctionnerait pour les fichiers HTML plats qu'il sert?

Je sais que vous pouvez faire une simulation de retard similaire au niveau du réseau (voir ici ) mais cela semble assez désordonné et n'a jamais très bien fonctionné pour moi.

BaronVonKaneHoffen
la source
Ne pensez-vous pas que ce serait encore plus compliqué avec Nginx?
DukeLion

Réponses:

3

Je voudrais ajouter à la réponse d' astlock que si vous voulez répondre simplement, returnnotez qu'il y a une mise en garde: vous devez utiliser echo, pas une returndirective standard , après echo_sleeppour répondre avec un retard, comme ceci:

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

(Testé sur openresty / 1.7.10.2)

Greg Dubicki
la source
0

Donner une explication plus détaillée de la façon dont vous pourriez utiliser le module d'écho:

Si vous partez d'une configuration de base, qui charge des fichiers statiques et des fichiers PHP, avec quelque chose comme ceci:

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

Cela peut ensuite être converti en quelque chose comme ceci pour ajouter un délai aux requêtes statiques et 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;
}

Cela peut évidemment être modifié pour tout ce que vous voulez. Fondamentalement, déplacez chaque bloc d'emplacement dans un @location nommé. Utilisez ensuite echo_sleepet echo_execdans le bloc d'emplacement d'origine.

Sam Bull
la source
-1

vous pouvez définir un serveur principal pour recevoir la demande, puis retarder la réponse sur le serveur. Nginx proxy la demande au serveur principal.

user387318
la source
-3

Il n'y a aucun moyen (IHMO) de retarder la réponse de nginx. Vous devez retravailler votre application et non votre serveur Web pour activer une telle fonctionnalité.

Deagh
la source