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


14

Поэтому, когда я локально тестирую такие вещи, как Ajax в приложениях, которые я пишу, мне часто нравится добавлять задержку в сценарии на стороне сервера, используя sleepоператор. Это помогает моделировать медленные соединения и т. Д.

Есть ли способ указать подобное поведение задержки непосредственно в конфигурации Nginx, которое будет работать для простых файлов HTML, которые он обслуживает?

Я знаю, что вы можете выполнить аналогичное моделирование задержки на сетевом уровне (см. Здесь ), но это кажется довольно грязным и никогда не работало для меня очень хорошо.


Тебе не кажется, что с Nginx было бы еще хуже?
DukeLion

Ответы:



3

Я хотел бы добавить к ответу астлока, что если вы хотите ответить простым текстом,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';
}

(Проверено на openresty / 1.7.10.2)


0

Дадим более подробное объяснение того, как вы можете использовать модуль echo:

Если вы начинаете с базовой конфигурации, которая загружает статические файлы и файлы 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.