2013-06-06 38 views
8

Tôi đang chạy cơn lốc xoáy phía sau apache. Tôi đã tạo máy chủ proxy.thời gian chờ vô hạn đối với proxy ngược trong Apache

ProxyRequests On 
ProxyPass /chat/ http://localhost:8888/chat/ 

Mã này hoạt động tốt và vượt qua mọi yêu cầu của tôi về lốc xoáy và trả lại phản hồi cho khách hàng.

Hiện tại, tôi đang sử dụng lốc xoáy để bỏ phiếu dài. Một số yêu cầu kết thúc trong một khoảng thời gian ngắn nói ít hơn 1 phút proxy ngược lại này hoạt động tốt. Nhưng một số yêu cầu bỏ phiếu dài nhất định này cho phép 502 lỗi proxy. Lý do cho lỗi proxy này là Apache có thể giữ yêu cầu bỏ phiếu dài chỉ trong một phút (theo mặc định). Nó đóng yêu cầu và do đó lỗi proxy được nhận.

Bây giờ, tôi sửa đổi các chỉ thị để

ProxyRequests On 
ProxyPass /chat/ http://localhost:8888/chat/ timeout=12000 

tức là tôi đã thay đổi thời gian chờ mặc định tới 12000 giây.

Điều này hiện đang hoạt động tốt cho tôi. Bu đây không phải là giải pháp tốt nhất cho vấn đề này. Yêu cầu bỏ phiếu lý tưởng dài có thể vượt quá bất kỳ thời gian chờ nào được chỉ định. Vì vậy, câu hỏi của tôi là

  1. Làm cách nào để hết thời gian chờ? tức là yêu cầu không bao giờ được Apache đóng lại.
  2. Xin vui lòng cũng bình luận: liệu hiệu suất của cơn lốc xoáy có bị suy thoái bằng cách đi qua Apache như máy chủ proxy không?
+0

Xin chào, câu trả lời của tôi có giúp ích gì cho bạn không? Bạn có thể bình luận về câu trả lời được không? – vaidik

Trả lời

1

Tôi gặp sự cố tương tự với Nginx và đã giải quyết vấn đề tương tự như bạn đã làm. Nhưng tôi đã thay đổi thời gian chờ thành 1 ngày vì nó đủ lớn trong trường hợp của tôi.

Tôi nghĩ bạn không thể làm được điều này. Lý do đằng sau điều này là Apache (hoặc bất kỳ máy chủ proxy nào cho vấn đề đó) phải duy trì hiệu suất của nó, mà rõ ràng là không thể nếu nó có các kết nối cũ hoặc không hoạt động. Thay vào đó, bạn muốn proxy proxy của mình hoạt động nhiều hơn các kết nối không hoạt động.

Do đó, không có cách nào để tắt ProxyTimeout trong Apache hoặc thậm chí trong Nginx (được định cấu hình bằng proxy_read_timeout). Vì vậy, nếu máy chủ proxy của bạn không gửi bất kỳ phản hồi nào trong thời gian chờ, thì máy chủ ứng dụng của bạn mất quá nhiều thời gian để phản hồi hoặc có sự cố với máy chủ ứng dụng của bạn hoặc máy khách không yêu cầu bất kỳ phản hồi nào. Trong trường hợp đầu tiên, bạn có thể thực hiện các ước tính an toàn để đặt thời gian chờ thích hợp. Trong trường hợp thứ hai, bạn cần sửa máy chủ ứng dụng của mình. Và trong trường hợp thứ ba, bạn phải xử lý tình huống một cách duyên dáng trên máy khách và kết nối lại nếu cần.

Đến với câu hỏi thứ hai của bạn, không nên có bất kỳ sự khác biệt nào ngoài độ trễ liên quan giữa máy chủ Apache và máy chủ Tornado của bạn. Bạn có thể phơi bày trực tiếp máy chủ Tornado của bạn với thế giới nhưng điều đó sẽ đi kèm với một vài thách thức: 1. Các hoạt động khác sẽ giúp bạn đảm bảo quá trình Tornado luôn hoạt động. 2. Việc ủy ​​quyền và cân bằng tải sẽ trở nên khó khăn hơn. 3. Bảo mật kém hơn khi bạn đã viết mã đó thay vì hàng nghìn người đóng góp chuyên gia. Vì vậy, bạn không nên nghĩ đến việc chạy máy chủ này như là root. Nhưng bạn vẫn có thể làm một cách an toàn với Apache hoặc Nginx.

Tất nhiên các vấn đề trên có thể giải quyết được, nhưng tại sao lại giải quyết một vấn đề đã được giải quyết. :)