Як мені дозволити Nginx зачекати кілька секунд, перш ніж подати актив?


14

Тому коли я локально тестую такі речі, як Ajax, у додатках, про які я пишу, мені часто подобається додавати затримку в сценарії на стороні сервера, використовуючи sleepоператор. Це допомагає імітувати повільні з'єднання тощо.

Чи є спосіб вказати подібну поведінку затримки безпосередньо в конфігурації Nginx, який би працював для плоских HTML-файлів, які він обслуговує?

Я знаю, що ви можете зробити подібне моделювання затримки на рівні мережі (див. Тут ), але це здається досить безладним і ніколи не працювало для мене дуже добре.


Ви не думаєте, що з Nginx було б ще більше бруднити?
DukeLion

Дивіться також: stackoverflow.com/questions/14752943 / ...
sanmai

Відповіді:



3

Я хотів би додати до відповіді astlock, що якщо ви хочете відповісти однозначно,return то зауважте, що є застереження: після відповіді із запізненням ви повинні використовувати echo, а не стандартну returnдирективу echo_sleep:

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

(Випробувано на відкритих місцях / 1.7.10.2)


0

Даючи більш детальне пояснення, як можна використовувати модуль ехо:

Якщо ви починаєте з базового конфігурації, що завантажує статичні файли та файли PHP, приблизно так:

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

Потім це може бути перетворене на щось подібне, щоб додати затримку як для статичних, так і для 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;
}

Це, очевидно, можна змінити на все, що завгодно. По суті, перемістіть кожен блок локації в іменованому @location. Потім використовуйте echo_sleepі echo_execв оригінальному блоці розташування.


-1

ви можете встановити сервер резервного сервера для отримання запиту, а потім затримати відповідь на сервері. Nginx проксі-сервер запит на бек-сервер.


-3

Немає способу (IHMO) затримати відповідь від nginx. Ви повинні переробити свою програму, а не веб-сервер, щоб увімкнути таку функцію.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.