Làm cách nào để tôi bảo Nginx đợi một vài giây trước khi phục vụ tài sản?


14

Vì vậy, khi tôi đang thử nghiệm cục bộ những thứ như Ajax trong các ứng dụng tôi đang viết, tôi thường muốn thêm một độ trễ trong các tập lệnh phía máy chủ bằng cách sử dụng một sleepcâu lệnh. Nó giúp mô phỏng các kết nối chậm, v.v.

Có cách nào để chỉ định một hành vi trì hoãn tương tự trực tiếp trong cấu hình Nginx sẽ hoạt động cho các tệp HTML phẳng mà nó đang phục vụ không?

Tôi biết bạn có thể thực hiện một mô phỏng độ trễ tương tự ở cấp độ mạng (xem tại đây ) nhưng có vẻ khá lộn xộn và chưa bao giờ hoạt động tốt cho tôi.


Bạn không nghĩ rằng nó sẽ còn lộn xộn hơn với Nginx?
DukeLion

Câu trả lời:



2

Tôi muốn thêm vào câu trả lời của astlock rằng nếu bạn muốn trả lời đơn giản returnthì lưu ý rằng có một cảnh báo: bạn phải sử dụng echo, không phải là một returnchỉ thị tiêu chuẩn , sau khi echo_sleeptrả lời chậm trễ, như thế này:

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

(Đã thử nghiệm trên openresty / 1.7.10.2)


0

Đưa ra lời giải thích chi tiết hơn về cách bạn có thể sử dụng mô-đun echo:

Nếu bạn đang bắt đầu từ một cấu hình cơ bản, sẽ tải các tệp tĩnh và tệp PHP, với nội dung như sau:

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

Điều đó sau đó có thể được chuyển đổi thành một cái gì đó như thế này để thêm độ trễ cho cả các yêu cầu tĩnh và 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;
}

Điều này rõ ràng có thể được sửa đổi cho bất cứ điều gì bạn muốn. Về cơ bản, di chuyển từng khối vị trí vào một @location có tên. Sau đó sử dụng echo_sleepecho_exectrong khối vị trí ban đầu.


-1

bạn có thể đặt máy chủ phụ trợ để nhận yêu cầu, sau đó trì hoãn phản hồi trong máy chủ. Nginx proxy yêu cầu đến máy chủ phụ trợ.


-3

Không có cách nào (IHMO) để trì hoãn phản hồi từ nginx. Bạn phải làm lại ứng dụng của bạn chứ không phải máy chủ web của bạn để kích hoạt tính năng đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.