Apache系列:Apache的全局配置

1
<br>配置文件组成:
1
2
3
4
5
6
7
8
9
整个配置文件由3段组成:
 
1)全局配置:对主服务器或虚拟机都有效,且有些功能是服务器自身工作属性;
 
2)主服务器:主站属性;
 
3)虚拟主机:虚拟主机及属性定义
 
注:第二段和第三段(即主机和虚拟主机)不能同时使用;

 

 

全局配置

 

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

  

 

二、DSO与MPM

Apache DSO

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

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

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

 

MPM(Multi Process Modules)

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

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

共有3种工作模式

1
2
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模式启动,无须更改启动模式。

参数说明:

1
2
3
4
5
6
7
8
<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
复制代码

参数说明:

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

  

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

  

4、配置加载的模块

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

 

5、其他常用配置

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

  

 

posted @   -零  阅读(1245)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示