Apache系列:Apache的全局配置


配置文件组成:
整个配置文件由3段组成:

(1)全局配置:对主服务器或虚拟机都有效,且有些功能是服务器自身工作属性;

(2)主服务器:主站属性;

(3)虚拟主机:虚拟主机及属性定义

注:第二段和第三段(即主机和虚拟主机)不能同时使用;

 

 

全局配置

 

一、配置监听的地址和端口

Listen  [IP:]PORT    //Listen可重复使用多次
默认监听80端口,不加ip,默认监听服务器上的多个ip地址上的80端口,你可以配置多个网卡,在不同的网卡上配置不同的IP,不管从哪个ip访问都能被监听

Listen 192.168.1.22:80:只监听这个ip地址的80端口

  

 

二、DSO与MPM

Apache DSO

apache是一个模块化设计的服务,核心只包含主要功能,扩展功能通过模块实现。
不同的模块的功能和特性都是独立分开的,这样扩展性更好,模块之间依赖性小,利于维护升级和扩展。
不同模块可以被静态的编译进程序,也可以动态加载。
模块的动态加载通过DSO(Dysnamic Shared Object)实现。

httpd -l :用于查看核心模块(静态编译入程序的模块)

httpd -M:用于查看当前apache安装的模块

 

MPM(Multi Process Modules)

意为多路处理模块,也就是我们所说的apache的工作模式。

MPM负责实现网络监听,请求的处理等功能、MPM有很多种,目的是为了在不同平台下实现最优化的性能及稳定性。

共有3种工作模式

prefork:一个主进程产生多个子进程,一个子进程响应一个请求;
worker:一个进程生成多个线程,一个线程响应一个请求;
event:基于事件驱动;

  

不同系统下可以使用的MPM:

 

说明

event在apache2.4版本之前是以测试状态提供,网上并没有太多的资料,在更新至2.4版本之后正式上线。

先来说prefork:当httpd启动起来之后,会生成一个主进程,它负责监听用户的请求,一旦请求进来后,它不负责自己响应,而是让其生成的子进程来响应,而主进程继续监听请求。
prefork是非线程,预生成进程型MPM、prefork会预先启动一些子进程,每个子进程一个时间点只能处理一个请求,并且会根据并发请求数量动态生成更多子进程。
通过子进程对外提供服务,处理请求,但是每个子进程在同时间内只能处理一个任务,这个可以在配置文件中设置。
如果有更多的请求,会自动生成更多的子进程来处理。

worker是线程化,多进程的MPM,每个进程可以生成多个线程,每个线程处理一个请求。
优点:节省资源,每多一个子进程就会多占用系统资源,使用线程处理请求。

apache默认prefork:现在的计算机系统资源还是比较够用的,使用prefork效率更高,但是如果要修改为 worker,则要重新静态编译模块。

需要考虑的是:刚启动服务的时候需要创建几个空闲进程,太多不好太少也不好。最少保证有几个空闲进程来响应请求进来,这是必须的。 最多设定多少个空闲进程,多余的空闲进程需要回收回来。
所以其有如下几个关键作用:
(1)启动服务时绑定特权端口:Linux系统中,只有管理员有权限使用小于1024的特权端口;但运行一些公共可用的服务,一定不能以管理员身份运行
(2)派发或回收子进程
(3)读取分析主配置文件
(4)监听每个用户请求并且派发子进程
View Code

 

配置prefork模型

apache服务默认就是以Prefork模式启动,无须更改启动模式。

参数说明:

<IfModule prefork.c>            #如果存在这个模块,那么提供以下属性
StartServers           8        #刚启动web服务时启动几个空闲子进程
MinSpareServers        5        #最少空闲进程数
MaxSpareServers        20       #最大空闲进程数
ServerLimit            256      #限定最多允许并发进来的活动用户连接个数
MaxClients 256 #服务器所允许同时所连接进来的链接数,一般来说与上面保持一致,或者大于上面的数。 
MaxRequestsPerChild 4000 #一个服务器进程最多可以处理多少个进程,一旦超出请求后无论如何将进程结束并新启动新进程
 </IfModule> #最后以IfModule结尾



注意:为什么不能一直用子进程处理去处理请求?
为什么不能一直用这个子进程处理请求?
1.担心子进程有内存泄漏,长期工作下会出现bug等问题,持续工作会一直吃系统资源
2.子进程假死状态,不能正常处理请求
为了保险起见,为了让apache更稳定,更安全的运行
View Code

 

配置worker模型

更改apache当前工作模式为worker模式

编辑文件/etc/sysconfig/httpd,将以下参数的注释信息去掉:

HTTPD=/usr/sbin/httpd.worker
更改模式后必须重新启动服务

[root@Centos ~]# service httpd restart
启动完毕后,查看其进程状态:

[root@Centos ~]# ps -ef | grep http
root      1667    1  0 23:43 ?        00:00:00 /usr/sbin/httpd.worker              #以root用户身份生成的父进程(用于派发工作进程)
apache    1671 1667  0 23:44 ?        00:00:00 /usr/sbin/httpd.worker              #以apache用户身份运行的工作进程(该工作进程派发线程)
apache    1672 1667  0 23:44 ?        00:00:00 /usr/sbin/httpd.worker
apache    1673 1667  0 23:44 ?        00:00:00 /usr/sbin/httpd.worker
apache    1676 1667  0 23:44 ?        00:00:00 /usr/sbin/httpd.worker

参数说明:

<IfModuleworker.c>
StartServers           4        #配置启动多少个用于监听的服务,注意:这里并不是服务器进程,而是线程
MaxClients             300      #最大支持的用户连接数
MinSpareThreads        25       #最小的空闲线程数
MaxSpareThreads        75       #最大的空闲线程数
ThreadsPerChild        25       #允许每个进程最多生成多少个线程
MaxRequestsPerChild    0        #设置一个独立的子进程将能处理的请求数量
</IfModule>

  

3、配置服务器支持keep-alived

KeepAlive {On|Off} :启用之后支持一次连接可以发多个请求(对于非常繁忙的服务器建议off
KeepAliveTimeout  15 : 15秒之后断开长连接
MaxKeepAliveRequests 50:一次长连接之内最多允许50个请求

  

4、配置加载的模块

#LoadModule指令  模块名称   模块所在的路径(相对于ServerRoot的路径)
LoadModule foo_module modules/mod_foo.so

 

5、其他常用配置

ServerTokens OS:返回服务器页脚信息的详细程度,尽量选择小信息量(full、major)
ServerRoot "/etc/httpd":服务器的配置文件所在
PidFile run/httpd.pid :服务器主进程pid的保存位置
Timeout 60:超时设置,设置短一点好
Include conf.d/*.conf:默认加载模块的配置文件

  

 

posted @ 2019-03-12 20:16  -零  阅读(1211)  评论(0编辑  收藏  举报