ServerSignature Off |
然后重新启动Apache服务器?br /> 通过分析Web服务器的cdQ大致可以推出操作pȝ的类型,比如QW(xu)indows使用IIS来提供HTTP服务Q而Linux中最常见的是Apache?br /> 默认的Apache配置里没有Q何信息保护机Ӟq且允许目录览。通过目录览Q通常可以获得cM“Apache/1.3.27 Server at apache.linuxforum.net Port 80”?#8220;Apache/2.0.49 (Unix) PHP/4.3.8”的信息?br /> 通过修改配置文g中的ServerTokens参数Q可以将Apache的相关信息隐藏v来。但是,Red Hat Linuxq行的Apache是编译好的程序,提示信息被编译在E序里,要隐藏这些信息需要修改Apache的源代码Q然后,重新~译安装E序Q以替换里面的提C内宏V?br /> 以Apache 2.0.50ZQ编辑ap_release.h文gQ修?#8220;#define AP_SERVER_BASEPRODUCT \"Apache\"”?#8220;#define AP_SERVER_BASEPRODUCT \"Microsoft-IIS/5.0\"”。编辑os/unix/os.h文gQ修?#8220;#define PLATFORM \"Unix\"”?#8220;#define PLATFORM \"Win32\"”。修改完毕后Q重新编译、安装Apache?br /> Apache安装完成后,修改httpd.conf配置文gQ将“ServerTokens Full”改ؓ(f)“ServerTokens Prod”Q将“ServerSignature On”改ؓ(f)“ServerSignature Off”Q然后存盘退出。重新启动Apache后,用工兯行扫描,发现提示信息中已l显C操作系lؓ(f)Windows?br />
I闲子进E:(x)是指没有正在处理h的子q程?/p>
1、prefork.c模块(一个非U程型的、预z的MPM)
prefork MPM 使用多个子进E,每个子进E只有一个线E。每个进E在某个定的时间只能维持一个连接。在大多数^CQPrefork MPM在效率上要比Worker MPM要高Q但是内存(sh)用大得多。prefork的无U程设计在某些情况下比worker更有优势Q它可以使用那些没有处理好线E安全的W三Ҏ(gu)块,q且对于那些U程调试困难的^台而言Q它也更Ҏ(gu)调试一些?/p>
<IfModule prefork.c>
ServerLimit 20000
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 1000
MaxRequestsPerChild 0
</IfModule>
ServerLimit 2000
//默认的MaxClient最大是256个线E?如果惌|更大的|q加上ServerLimitq个参数?0000是ServerLimitq个参数的最大倹{如果需要更大,则必ȝ译apache,此前都是不需要重新编译Apache?br />
生效前提Q必L在其他指令的前面
StartServers 5
//指定服务器启动时建立的子q程数量Qprefork默认??/p>
MinSpareServers 5
//指定I闲子进E的最数量,默认?。如果当前空闲子q程数少于MinSpareServers Q那么Apache以最大每U一个的速度产生新的子进E。此参数不要讄太大?/p>
MaxSpareServers 10
//讄I闲子进E的最大数量,默认?0。如果当前有过MaxSpareServers数量的空闲子q程Q那么父q程杀d余的子进E。此参数不要讄太大。如果你该指o(h)的D|ؓ(f)比MinSpareServers,Apache会(x)自动其修改?MinSpareServers+1"?/p>
MaxClients 256
//限定同一旉客户端最大接入请求的数量(单个q程q发U程?Q默认ؓ(f)256。Q何超qMaxClients限制的请求都进入等候队?一旦一个链接被释放Q队列中的请求将得到服务。要增大q个|你必d时增大ServerLimit ?/p>
MaxRequestsPerChild 10000
//每个子进E在其生存期内允怼服的最大请求数量,默认?0000.到达MaxRequestsPerChild的限制后Q子q程会(x)l束。如果MaxRequestsPerChild?0"Q子q程永q不?x)结束?/p>
MaxRequestsPerChild讄成非零值有两个好处Q?br />
1.可以防止(偶然?内存泄漏无限q行Q从而耗尽内存?
2.l进E一个有限寿命,从而有助于当服务器负蝲减轻的时候减活动进E的数量?/p>
工作方式Q?br /> 一个单独的控制q程(父进E?负责产生子进E,q些子进E用于监听请求ƈ作出应答。ApacheL试图保持一些备用的(spare)或者是I闲的子q程用于q接卛_到来的请求。这样客L(fng)׃需要在得到服务前等候子q程的生。在Unixpȝ中,父进E通常以rootw䆾q行以便邦定80端口Q而Apache产生的子q程通常以一个低Ҏ(gu)的用戯行。User和Group指o(h)用于讄子进E的低特权用戗运行子q程的用户必要对它所服务的内Ҏ(gu)d的权限,但是Ҏ(gu)务内容之外的其他资源必须拥有可能少的权限?/p>
2、worker.c模块(支持混合的多U程多进E的多\处理模块)
worker MPM 使用多个子进E,每个子进E有多个U程。每个线E在某个定的时间只能维持一个连接。通常来说Q在一个高?gu)量的HTTP服务器上QW(xu)orker MPM是个比较好的选择Q因为Worker MPM的内存(sh)用比Prefork MPM要低得多。但worker MPM也由不完善的地方Q如果一个线E崩溃,整个q程׃(x)q同其所有线E一?L".׃U程׃n内存I间Q所以一个程序在q行时必被pȝ识别?每个U程都是安全??/p>
<IfModule worker.c>
ServerLimit 50
ThreadLimit 200
StartServers 5
MaxClients 5000
MinSpareThreads 25
MaxSpareThreads 500
ThreadsPerChild 100
MaxRequestsPerChild 0
</IfModule>
ServerLimit 16
//服务器允?dng)R|的q程C限。这个指令和ThreadLimitl合使用讄?jin)MaxClients最大允?dng)R|的数倹{Q何在重启期间对这个指令的改变都将被忽略,但对MaxClients的修改却?x)生效?/p>
ThreadLimit 64
//每个子进E可配置的线E数上限。这个指令设|了(jin)每个子进E可配置的线E数ThreadsPerChild上限。Q何在重启期间对这个指令的改变都将被忽略,但对ThreadsPerChild的修改却?x)生效。默认值是"64".
StartServers 3
//服务器启动时建立的子q程敎ͼ默认值是"3"?/p>
MinSpareThreads 75
//最空闲线E数,默认值是"75"。这个MPM基于整个服务器监视I闲U程数。如果服务器中ȝI闲U程数太,子进E将产生新的I闲U程?/p>
MaxSpareThreads 250
//讄最大空闲线E数。默认值是"250"。这个MPM基于整个服务器监视I闲U程数。如果服务器中ȝI闲U程数太多,子进E将杀d余的I闲U程。MaxSpareThreads的取D围是有限制的。Apache按照如下限制自动修正你讄的|(x)worker要求其大于等于MinSpareThreads加上ThreadsPerChild的和
MaxClients 400
//允许同时伺服的最大接入请求数?最大线E数?。Q何超qMaxClients限制的请求都进入等候队列。默认值是"400",16(ServerLimit)乘(sh)25(ThreadsPerChild)的结果。因此要增加MaxClients的时候,你必d时增加ServerLimit的倹{?/p>
ThreadsPerChild 25
//每个子进E徏立的帔R的执行线E数。默认值是25。子q程在启动时建立q些U程后就不再建立新的U程?jin)?/p>
MaxRequestsPerChild 0
//讄每个子进E在其生存期内允怼服的最大请求数量。到达MaxRequestsPerChild的限制后Q子q程会(x)l束。如果MaxRequestsPerChild?0"Q子q程永q不?x)结束?/p>
MaxRequestsPerChild讄成非零值有两个好处Q?br />
1.可以防止(偶然?内存泄漏无限q行Q从而耗尽内存?
2.l进E一个有限寿命,从而有助于当服务器负蝲减轻的时候减活动进E的数量?
注意
对于KeepAlive链接Q只有第一个请求会(x)被计数。事实上Q它改变?sh)(jin)每个子q程限制最大链接数量的行ؓ(f)?/p>
工作方式Q?br /> 每个q程可以拥有的线E数量是固定的。服务器?x)根据负载情况增加或减少q程数量。一个单独的控制q程(父进E?负责子进E的建立。每个子q程可以建立ThreadsPerChild数量的服务线E和一个监听线E,该监听线E监听接入请求ƈ其传递给服务U程处理和应{。ApacheL试图l持一个备?spare)或是I闲的服务线E池。这P客户端无ȝ待新U程或新q程的徏立即可得到处理。在Unix中,Z(jin)能够l定80端口Q父q程一般都是以rootw䆾启动Q随后,Apache以较低权限的用户建立子进E和U程。User和Group指o(h)用于讄Apache子进E的权限。虽然子q程必须对其提供的内Ҏ(gu)有读权限Q但应该可能给予它较少的特权。另外,除非使用?jin)suexec Q否则,q些指o(h)讄的权限将被CGI脚本所l承?/p>
公式Q?br />
ThreadLimit >= ThreadsPerChild
MaxClients <= ServerLimit * ThreadsPerChild 必须是ThreadsPerChild的倍数
MaxSpareThreads >= MinSpareThreads+ThreadsPerChild
限Ӟ(x)
ServerLimi和ThreadLimitq两个指令决定了(jin)zd子进E数量和每个子进E中U程数量的硬限制。要x(chng)变这个硬限制必须完全停止服务器然后再启动服务?直接重启是不行的)?/font>
Apache在编译ServerLimit时内部有一个硬性的限制Q你不能越q个限制?br />
prefork MPM最大ؓ(f)"ServerLimit 200000"
其它MPM(包括work MPM)最大ؓ(f)"ServerLimit 20000
Apache在编译ThreadLimit时内部有一个硬性的限制Q你不能越q个限制?br />
mpm_winnt?ThreadLimit 15000"
其它MPM(包括work prefork)?ThreadLimit 20000
注意
使用ServerLimit和ThreadLimit时要特别当心(j)。如果将ServerLimit和ThreadLimit讄成一个高出实际需要许多的|会(x)有过多的׃n内存被分配。当讄成超q系l的处理能力QApache可能无法启动Q或者系l将变得不稳定?/font>