簡體   English   中英

Apache中反向代理的無限超時

[英]infinite timeout for reverse proxy in Apache

我正在阿帕奇后面跑龍卷風。 我已經創建了代理服務器。

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

這段代碼很好用,並將我的所有請求傳遞給龍卷風,並將響應返回給客戶端。

現在,我正在使用龍卷風進行長時間輪詢。 在較短的時間間隔內完成的某些請求說,此反向代理不到1分鍾即可正常工作。 但是某些長輪詢請求會產生502代理錯誤。 此代理錯誤的原因是Apache可以將長輪詢請求保留一分鍾(默認情況下)。 它關閉請求,因此收到代理錯誤。

現在,我將指令修改為

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

即我將默認超時更改為12000秒。

目前這對我來說很好。 但是,這不是解決該問題的最佳方法。 理想情況下,較長的輪詢請求可以超過指定的任何超時。 所以我的問題是

  1. 如何使超時無限? 即該請求永遠不會被Apache關閉。
  2. 另請評論:通過將Apache作為代理服務器,龍卷風的性能是否會降低?

我在Nginx上遇到了類似的問題,並以與您相同的方式解決了它。 但是我將超時更改為1天,因為在我的情況下它足夠大。

我認為您無法消除這一點。 這背后的理由是Apache(或與此有關的任何代理服務器)必須保持其性能,如果必須保持陳舊或不活動的連接,則顯然不能保持其性能。 您寧願讓代理服務器代理比非活動連接更多的活動連接。

因此,無法在Apache甚至Nginx(使用proxy_read_timeout配置)中關閉ProxyTimeout。 因此,如果代理服務器未在超時時間內發送任何響應,則說明您的應用程序服務器響應時間太長,或者您的應用程序服務器出了點問題,或者客戶端未請求任何響應。 在第一種情況下,您可以進行安全估計以設置適當的超時。 在第二種情況下,您需要修復應用程序服務器。 在第三種情況下,您必須妥善處理客戶端的情況,並在需要時重新連接。

談到第二個問題,除了Apache和Tornado服務器之間的延遲之外,應該沒有其他區別。 您可以很好地將Tornado服務器直接暴露給全世界,但這會帶來一些挑戰:1.更多的操作工作-確保Tornado進程始終處於運行狀態。 2.代理和負載平衡將變得更加困難。 3.由於您編寫的是代碼而不是成千上萬的專業貢獻者,因此安全性更差。 因此,您不應該考慮將每個服務器都以root用戶身份運行。 但是您仍然可以安全地對Apache或Nginx進行相同的操作。

上述問題當然可以解決,但是為什么要解決已經解決的問題。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM