Bagaimana saya memberi tahu Nginx untuk menunggu beberapa detik sebelum menyajikan aset?

14

Jadi ketika saya secara lokal menguji hal-hal seperti Ajax di aplikasi yang saya tulis, saya sering ingin menambahkan penundaan skrip sisi server menggunakan sleeppernyataan. Ini membantu mensimulasikan koneksi lambat dll.

Apakah ada cara untuk menentukan perilaku penundaan yang serupa secara langsung di konfigurasi Nginx yang akan berfungsi untuk file HTML datar yang disajikan?

Saya sadar Anda dapat melakukan simulasi penundaan serupa di tingkat jaringan (lihat di sini ) tetapi tampaknya cukup berantakan dan tidak pernah bekerja dengan baik untuk saya.

BaronVonKaneHoffen
sumber
Tidakkah Anda pikir itu akan lebih berantakan dengan Nginx?
DukeLion

Jawaban:

3

Saya ingin menambahkan jawaban astlock bahwa jika Anda ingin membalas dengan polos returnmaka perhatikan bahwa ada peringatan: Anda harus menggunakan echo, bukan returnarahan standar , setelah echo_sleepmenanggapi dengan penundaan, seperti ini:

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

(Diuji pada openresty / 1.7.10.2)

Greg Dubicki
sumber
0

Memberikan penjelasan yang lebih rinci tentang bagaimana Anda dapat menggunakan modul gema:

Jika Anda mulai dari konfigurasi dasar, yang memuat file statis dan file PHP, dengan sesuatu seperti ini:

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

Itu kemudian dapat dikonversi menjadi sesuatu seperti ini untuk menambahkan penundaan pada permintaan statis dan 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;
}

Ini jelas dapat dimodifikasi untuk apa pun yang Anda inginkan. Pada dasarnya, pindahkan setiap blok lokasi ke @lokasi. Kemudian gunakan echo_sleepdan echo_execdi blok lokasi asli.

Sam Bull
sumber
-1

Anda dapat mengatur server backend untuk menerima permintaan, lalu menunda untuk merespons di server. Nginx proksi permintaan ke server backend.

user387318
sumber
-3

Tidak ada cara (IHMO) untuk menunda respons dari nginx. Anda harus mengolah aplikasi Anda bukan server web Anda untuk mengaktifkan fitur tersebut.

tuli
sumber