Назад | Перейти на главную страницу

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

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

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

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

Вам следует попробовать эхо-модуль.

Я хотел бы добавить к Ответ астлока что если вы хотите ответить простым 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)

Даем более подробное объяснение того, как вы можете использовать модуль 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 в исходном блоке локации.

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

Нет способа (IHMO) задержать ответ от nginx. Вы должны переделать свое приложение, а не свой веб-сервер, чтобы включить эту функцию.