2010-10-30 93 views
0

建立到端口80的連接時,我讀取了這些客戶端請求由子服務器(在prefork MPM中)或服務器線程(在worker MPM中)處理,但不由主服務器處理apache進程首先由root用戶啓動,並負責分派新的子進程)。但是,這些子服務器和服務器線程如何以非特權用戶身份運行,因此他們如何才能訪問只能由「主服務器」完成的特權端口80。請在此點亮一下。我從未在任何地方看到任何解釋。MPM中的Apache請求處理

回答

2

您只需要開始在特權端口上偵聽的權限。如果進程以root身份啓動,則它可以在端口80上綁定(),然後刪除權限。它將不再是root,但只要它不關閉監聽端口80的filedescriptor,它將繼續能夠接受端口80上的新連接。

要分叉新進程,您不需要特殊權利....

+1

感謝您的迴應:)所以在Apache中的所有請求處理是由子服務器(在prefork實現的情況下)或服務器線程(在工作人員實現的情況下)完成,沒有請求由服務主服務器? – user492160 2010-10-30 13:51:12

+0

這是正確的,主服務器只接受連接,選擇哪個子服務器處理請求,並將請求交給子進程。 – Peter 2010-10-30 14:16:09

+0

但是我在「The Apache Modeling Project Documentation」中讀到了主服務器創建子進程。在prefork模型中,有一個「聽衆」和「多個閒散工人」的孩子。在這個孩子池中,他們可以被認爲排隊等候。從第二個孩子算起,第一個被稱爲「聽衆」的孩子被稱爲「空閒工人」。只有監聽器的孩子可以監聽套接字的連接(ie.e在port80上)。當收到一個請求時,這個孩子從'聽者'轉換到'工作者'。 – user492160 2010-10-31 03:55:44