Apache-2.2
apache 如何使用 worker 和 prefork mpm 模組處理連接和請求?
我知道 apache 中的 prefork 模組創建了一個主程序和幾個子程序來處理連接,我的問題是:
每個 prefork 子程序是每次處理一個連接還是處理一個請求?如果它處理一個連接,這是否意味著每個新連接都需要在隊列中等待由空閒子程序之一處理?以及關於保持活動連接的說法是什麼?
我對使用執行緒的工人 mpm 模組也有同樣的問題?
每個 prefork 子程序是每次處理一個連接還是處理一個請求?
每個子/執行緒處理一個連接(TCP 連接)。
一旦連接關閉,子程序將等待另一個連接。在一個連接上,可以發送 0、1 或多個請求(HTTP 請求)。
如果客戶端未發送請求,您的日誌中可能會出現 HTTP 408 超時,具體取決於您的配置。
啟用KeepAlive後,每個連接可以有超過 1 個 HTTP 請求,因為一旦提供第一個請求,連接就不會關閉。
在沒有 KeepAlive 的情況下,一個請求有 1 個連接,這就是問題所在。
每個新連接都需要在隊列中等待由空閒子程序之一處理嗎?
是的,這就是您將配置 Apache 以擁有一些空閒伺服器/執行緒的原因,因此新連接不需要等待新的子程序/執行緒被創建。如果沒有足夠的子程序,將根據需要並根據配置中的限制創建新的。
到目前為止,我自己對這個過程的理解。