2010-10-30 71 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