một phản hồi ngược dòng được đệm vào một tệp tạm thời


61

Tôi có một (dữ liệu phức tạp, phức tạp frontend) khá lớn và chậm ứng dụng web xây dựng trong RoRvà phục vụ bởi Pumavới nginxproxy ngược lại. Nhìn vào nginxnhật ký lỗi, tôi thấy khá nhiều mục như:

2014/04/08 09:46:08 [warn] 20058#0: *819237 an upstream response is buffered to a temporary file 
    /var/lib/nginx/proxy/8/47/0000038478 while reading upstream, 
    client: 5.144.169.242, server: engagement-console.foo.it, 
    request: "GET /elements/pending?customer_id=2&page=2 HTTP/1.0", 
    upstream: "http://unix:///home/deployer/apps/conversationflow/shared/sockets/puma.sock:/elements/pending?customer_id=2&page=2", 
    host: "ec.reputationmonitor.it", 
    referrer: "http://ec.foo.it/elements/pending?customer_id=2&page=3"

Tôi khá tò mò vì rất có thể trang này vẫn giống nhau cho những người dùng khác nhau và các tương tác người dùng khác nhau và tôi không nghĩ rằng việc đệm phản hồi trên đĩa là cần thiết / hữu ích.

Tôi biết proxy_max_temp_file_sizevà đặt nó về 0, nhưng có vẻ hơi khó xử (proxy của tôi cố gắng đệm nhưng không có tệp nào để đệm đến ... làm sao có thể nhanh hơn?).

Câu hỏi của tôi là:

  1. Làm cách nào tôi có thể xóa [cảnh báo] và tránh phản hồi đệm? Là tốt hơn để tắt proxy_bufferinghoặc đặt proxy_max_temp_file_sizethành 0? Tại sao?

  2. Nếu nginxbộ đệm một phản hồi: Khi nào nó phục vụ phản hồi được đệm, cho ai và tại sao?

  3. Tại sao nginxbật proxy_bufferingtheo mặc định và sau đó [cảnh báo] nếu bạn thực sự đệm phản hồi?

  4. Khi nào một phản ứng kích hoạt tùy chọn đó? Khi phải mất> vài giây (bao nhiêu?) Để phục vụ phản hồi? Đây có phải là cấu hình?

TIA, ngw.


1
Tôi có một cảm giác rằng bạn đang nhầm lẫn bộ đệm với bộ nhớ đệm. Bộ đệm là thủ tục cho phép tải nhiều dữ liệu hơn mức cho phép của cấp phát bộ nhớ.
Slavic

Câu trả lời:


75

1) Làm cách nào tôi có thể xóa [cảnh báo] và tránh phản hồi đệm? Có phải tốt hơn để tắt proxy_buffering hoặc đặt proxy_max_temp_file_size thành 0? Tại sao?

Bạn nên đặt proxy_max_temp_file_sizethành 0 để loại bỏ nó. Lệnh proxy_bufferingkhông liên quan trực tiếp đến cảnh báo. Bạn có thể tắt nó đi để dừng bất kỳ bộ đệm nào nhưng nói chung điều đó không được khuyến nghị (trừ khi nó cần thiết cho Comet ).

2) Nếu nginx đệm một phản hồi khi nào nó phục vụ phản hồi đệm, cho ai và tại sao?

Nó phục vụ ngay lập tức, nhưng một máy khách thường có kết nối chậm hơn nhiều và không thể tiêu thụ dữ liệu phản hồi nhanh như ứng dụng của bạn tạo ra. Nginx cố gắng đệm toàn bộ phản hồi để phát hành ứng dụng của bạn càng sớm càng tốt.

Xem thêm: http://aosabook.org/en/nginx.html

3) Tại sao nginx bật proxy_buffering theo mặc định và sau đó [cảnh báo] nếu bạn thực sự đệm một phản hồi?

Như tôi đã đề cập, proxy_bufferingkhông liên quan trực tiếp đến cảnh báo. Nó thường cần thiết cho các hoạt động proxy được tối ưu hóa và tắt nó làm giảm hiệu suất và thông lượng.

Nginx chỉ cảnh báo bạn khi phản hồi không phù hợp với bộ đệm được cấu hình. Bạn có thể bỏ qua cảnh báo nếu nó ổn cho bạn.

4) Khi nào một phản ứng kích hoạt tùy chọn đó? Khi phải mất hơn một vài giây (bao nhiêu?) Để phục vụ phản hồi? Đây có phải là cấu hình?

Nó kích hoạt khi bộ nhớ đệm đầy. Xin vui lòng, nhìn vào các tài liệu, toàn bộ cơ chế được giải thích: http://nginx.org/r/proxy_max_temp_file_size

Bạn có thể muốn tăng bộ nhớ đệm.


5
Đối với # 1, làm thế nào để loại bỏ giới hạn kích thước của các tệp tạm thời ngăn cảnh báo đệm? Tôi không nghĩ rằng điều này là đúng bởi vì tôi đã đặt lệnh này thành 0 và vẫn nhận được cảnh báo.
Phil

Câu trả lời này là không đủ rõ ràng, nó là tốt hơn để thực hiện để thiết lập proxy_max_temp_file_sizecho 0hay đây chỉ là một cách để loại bỏ cảnh báo đó?
Offir Pe'er

12

Các cấu hình sau hoạt động tốt trên máy chủ của tôi.

proxy_buffers 16 16k;  
proxy_buffer_size 16k;

2
Là chỉ thị thứ hai dự phòng, tức là 16ktrong dòng đầu tiên đang thực hiện chính xác như dòng thứ hai?
EoghanM

1
@EoghanM theo các tài liệu, không. Proxy_Buffer_size (bộ đệm, không phải số nhiều) áp dụng cho phần đầu tiên của phản hồi của máy chủ proxy (còn gọi là các tiêu đề) Sets the size of the buffer used for reading the first part of the response received from the proxied server. This part usually contains a small response header. Proxy_buffers dành cho phần còn lại của phản hồi.
cde

2
Bạn đã lưu một số tóc của tôi ngày hôm nay. Tôi đã chuyển nginx từ máy chủ của chúng tôi sang một container docker và nó bắt đầu chậm TUYỆT VỜI. Điều này "cố định" nó. Không chắc chắn liệu phiên bản trên máy chủ của chúng tôi có bật cái này theo mặc định hay không, nhưng phiên bản trong bộ chứa chắc chắn cần các cài đặt này.
Kirtian
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.