apache服务器默认的工作方式是(Apache服务器默认的工作方式是)
- 服务器
- 2022-12-20 01:44:28
- 11
本篇文章给大家谈谈apache服务器默认的工作方式是,以及Apache服务器默认的工作方式是对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
Apache 配置
Apache 配置
1、下载apache
2、 ./configure
--prefix=/usr/local/apache2.2.32
--enable-deflate
--enable-headers
--enable-expires
--enable-modules=most
--enable-so
--with-mpm=worker
--enable-rewrite
3、 make
4、make install
配置文件
一、/usr/local/apache/conf/httpd.conf 内容解析
Server root 服务的根目录
Listen 80 监听的端口
Server admin you@example.com管理员邮箱
Servername 网站名
Documentroot /usr/local/apache/htdocs 站点目录,需改成自己的站点目录
表示根目录拒绝其他人访问
Options FollowSymLinks
AllowOverride None 禁止相关功能
Order deny,allow 不让任何人访问根目录
Deny from all 不让任何人访问根目录
新增加站点目录,必须增加下面六行,否则网站打不开
把站点目录/usr/local/apache2.2.32/htdocs改成自己的站点目录
Options Indexes FollowSymLinks 如去掉Indexes,站点目录如果没有首页也不会暴露站点目录。为了安全,通常配置会去掉。
AllowOverride None
Order allow,deny
Allow from all
DirectoryIndex index.html 指定访问首页,如果有多个首页,都列出,空格隔开
ErrorLog "logs/error_log" 错误日志
去掉include conf/extra/ httpd-mpm.conf和include conf/extra/ httpd-vhosts.conf 前面的#号
二、/usr/local/apache/conf/extra 扩展的配置文件
1、 httpd-mpm.conf
工作模式为prefork模式。默认为该模式。#Apache共两种模式,prefork和worker
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
工作模式为worker模式,编译时已指定为worker模式。
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
2、 httpd-vhosts.conf 配置网站大部分在这里配置
NameVirtualHost *:80 基于域名的服务,一个主机想跑多个网站在这里配置
3、httpd-default.conf 了解
Timeout 300 超时
KeepAlive On 连接保持
MaxKeepAliveRequests 100 最大接受多少个连接
KeepAliveTimeout 5 等待下一个连接时间
AccessFileName .htaccess 设置伪静态
ServerTokens Full 隐藏apache版本
ServerSignature On 隐藏apache版本
FQDN 完整的域名解析
错误报告:httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
Syntax OK
解决办法: vim /usr/local/apache/conf/httpd.conf
把 servername :80 增加成servername 127.0.0.1:80
Apache服务器中prefork和worker工作模式的区别以及性能优化
1、RedHat Linux下查看apache版本号
在Apache安装目录bin下,使用以下命令查看即可。
使用命令:./httpd -v
示例:
2、查看Apache当前工作模式
Apache有prefork和worker工作模式
使用命令:./apachectl –l
示例:
从以上结果可知,当时httpd工作在prefork模式下。
在configure时,可以通过指定参数,将工作模式设置为worker模式或prefork模式。
使用命令:./configure --with-mpm=worker
示例:设置为worker模式
Apache服务的两种工作模式详解:
prefork的工作原理及配置
如果不用“--with-mpm”显式指定某种MPM,prefork就是Unix平台上缺省的MPM。它所采用的预派生子进程方式也是Apache 1.3中采用的模式。prefork本身并没有使用到线程,2.0版使用它是为了与1.3版保持兼容性;另一方面,prefork用单独的子进程来处理不同的请求,进程之间是彼此独立的,这也使其成为最稳定的MPM之一。
若使用prefork,在make编译和make install安装后,使用“httpd -l”来确定当前使用的MPM,应该会看到prefork.c(如果看到worker.c说明使用的是worker MPM,依此类推)。再查看缺省生成的httpd.conf配置文件,里面包含如下配置段:
IfModule prefork.c
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
/IfModule
prefork的工作原理是,控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止。这就是预派生(prefork)的由来。这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。
MaxSpareServers设置了最大的空闲进程数,如果空闲进程数大于这个值,Apache会自动kill掉一些多余进程。这个值不要设得过大,但如果设的值比MinSpareServers小,Apache会自动把其调整为MinSpareServers+1。如果站点负载较大,可考虑同时加大MinSpareServers和MaxSpareServers。
MaxRequestsPerChild设置的是每个子进程可处理的请求数。每个子进程在处理了“MaxRequestsPerChild”个请求后将自动销毁。0意味着无限,即子进程永不销毁。虽然缺省设为0可以使每个子进程处理更多的请求,但如果设成非零值也有两点重要的好处:
◆ 可防止意外的内存泄漏;
◆ 在服务器负载下降的时侯会自动减少子进程数。
因此,可根据服务器的负载来调整这个值。个人认为10000左右比较合适。
MaxClients是这些指令中最为重要的一个,设定的是Apache可以同时处理的请求,是对Apache性能影响最大的参数。其缺省值150是远远不够的,如果请求总数已达到这个值(可通过ps -ef|grep http|wc -l来确认),那么后面的请求就要排队,直到某个已处理请求完毕。这就是系统资源还剩下很多而HTTP访问却很慢的主要原因。系统管理员可以根据硬件配置和负载情况来动态调整这个值。虽然理论上这个值越大,可以处理的请求就越多,但Apache默认的限制不能大于256。如果把这个值设为大于256,那么Apache将无法起动。事实上,256对于负载稍重的站点也是不够的。在Apache 1.3中,这是个硬限制。如果要加大这个值,必须在“configure”前手工修改的源代码树下的src/include/httpd.h中查找256,就会发现“#define HARD_SERVER_LIMIT 256”这行。把256改为要增大的值(如4000),然后重新编译Apache即可。在Apache 2.0中新加入了ServerLimit指令,使得无须重编译Apache就可以加大MaxClients。下面是prefork配置段:
IfModule prefork.c
StartServers 10
MinSpareServers 10
MaxSpareServers 15
ServerLimit 2000
MaxClients 1000
MaxRequestsPerChild 10000
/IfModule
上述配置中,ServerLimit的最大值是2000,对于大多数站点已经足够。如果一定要再加大这个数值,对位于源代码树下server/mpm/prefork/prefork.c中以下两行做相应修改即可:
#define DEFAULT_SERVER_LIMIT 256
#define MAX_SERVER_LIMIT 2000
worker的工作原理及配置
相对于prefork,worker是2.0 版中全新的支持多线程和多进程混合模型的MPM。由于使用线程来处理,所以可以处理相对海量的请求,而系统资源的开销要小于基于进程的服务器。但是,worker也使用了多进程,每个进程又生成多个线程,以获得基于进程服务器的稳定性。这种MPM的工作方式将是Apache 2.0的发展趋势。
在configure -with-mpm=worker后,进行make编译、make install安装。在缺省生成的httpd.conf中有以下配置段:
IfModule worker.c
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
/IfModule
worker的工作原理是,由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild线程数,各个线程独立地处理请求。同样,为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;而MaxClients设置了所有子进程中的线程总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。
MinSpareThreads和MaxSpareThreads的最大缺省值分别是75和250。这两个参数对Apache的性能影响并不大,可以按照实际情况相应调节。
ThreadsPerChild是worker MPM中与性能相关最密切的指令。ThreadsPerChild的最大缺省值是64,如果负载较大,64也是不够的。这时要显式使用ThreadLimit指令,它的最大缺省值是20000。上述两个值位于源码树server/mpm/worker/worker.c中的以下两行:
#define DEFAULT_THREAD_LIMIT 64
#define MAX_THREAD_LIMIT 20000
这两行对应着ThreadsPerChild和ThreadLimit的限制数。最好在configure之前就把64改成所希望的值。注意,不要把这两个值设得太高,超过系统的处理能力,从而因Apache不起动使系统很不稳定。
Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild值决定的,应该大于等于MaxClients。如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进程。默认最大的子进程总数是16,加大时也需要显式声明ServerLimit(最大值是20000)。这两个值位于源码树server/mpm/worker/worker.c中的以下两行:
#define DEFAULT_SERVER_LIMIT 16
#define MAX_SERVER_LIMIT 20000
需要注意的是,如果显式声明了ServerLimit,那么它乘以ThreadsPerChild的值必须大于等于MaxClients,而且MaxClients必须是ThreadsPerChild的整数倍,否则Apache将会自动调节到一个相应值(可能是个非期望值)。下面是worker配置段:
IfModule worker.c
StartServers 3
MaxClients 2000
ServerLimit 25
MinSpareThreads 50
MaxSpareThreads 200
ThreadLimit 200
ThreadsPerChild 100
MaxRequestsPerChild 0
/IfModule
通过上面的叙述,可以了解到Apache 2.0中prefork和worker这两个重要MPM的工作原理,并可根据实际情况来配置Apache相关的核心参数,以获得最大的性能和稳定性。
apache-httpd的三种模式
apache httpd-2.4
新增模块;
mod_proxy_fcgi(可提供 fcgi 代理)
mod_ratelimit(限制用户带宽)
mod_request(请求模块,对请求做过滤)
mod_remoteip(匹配客户端的 IP 地址)
对于基于 IP 的访问控制做了修改,不再支持 allow,deny,order 机制,而是统一使用 require进行
还新增以下几条新特性;
1、MPM 支持在运行时装载;不过要开启这种特性,在编译安装要启用这三种功能;
--enable-mpms-shared=all --with-mpm=event
2、支持 event
3、支持异步读写
4、在每个模块及每个目录上指定日志级别
5、增强版的表达式分析器
6、每请求配置:If, Elseif
7、毫秒级别的 keepalive timeout
8、基于 FQDN 的虚拟主机不再需要 NameVirtualHost 指令
9、支持使用自定义变量
安装时HTTPd 可以添加许多模块
相关模块解析:
--enable-so:支持动态共享模块(即打开 DSO 支持)
--enable-rewrite:支持 url 重写
--enable-ssl:支持 ssl
--with-ssl=/usr/local/openssl:指定 ssl 安装位置
--enable-cgi:启用 cgi
--enable-cgid:MPM 使用的是 event 或 worker 要启用 cgid
--enable-modules=most:明确指明要静态编译到 httpd 二进制文件的模块,MODULE-LIST为
空格分隔的模块名列表、all 或者 most,all 表示包含所有模块,most 表示包含大部分常用模
块
--enable-mpms-shared=all:启用 MPM 所有支持的模式,这样 event、worker、prefork 就会以
模块化的方式安装,要用哪个就在 httpd.conf 里配置就好了。
--with-mpm=event:指定启用的 mpm 模式,默认使用 enevt 模式,在 apache 的早期版本 2.0
默认 prefork,2.2 版本是 worker,2.4 版本是 event.
--with-pcre=/usr/local/pcre:支持 pcre
--with-z=/usr/local/zlib:使用 zlib 压缩库
--with-apr=/usr/local/apr:指定 apr 的安装路径
--with-apr-util=/usr/local/apr-util:指定 apr-util 的安装路径
--enable-expires:激活彧通过配置文件控制 HTTP 的“Expires:”和“Cache-Control:”头内容,即
对网站图片、js、css 等内容,提供客户端浏览器缓存的设置。这个是 apache 调优的一个重
要选项之一。
--enable-deflate:提供对内容的压缩传输编码支持,一般是 html、js、css 等内容的站点。使
用此参数会打打提高传输速度,提升访问者访问的体验。在生产环境中,这是 apache 调优
的一个重要选项之一。
Apache 的优化配置:
apache 所运行的硬件环境都是对性能影响最大的因素,即使不能对硬件进行升级,也最好
给 apache 一个单独的主机以免受到其他应用的干扰。各个硬件指标中,对性能影响最大的
是内存,对于静态内容(图片、javascript 文件、css 文件等),它决定了 apache 可以缓存多
少内容,它缓存的内容越多,在硬盘上读取内容的机会就越少,大内存可以极大提高静态站
点的速度;对动态高负载站点来说,每个请求保存的时间更多一些,apache 的 mpm 模块会
为每个请求派生出相应的进程或线程分别处理,而进程或线程的数量与内存的消耗近似成正
比,因此增大内存对提高动态站点的负载和运行速度也极为有利
其次是硬盘的速度,静态站点尤为突出,apache 不断的在读取文件并发送给相应的请求,
硬盘的读写是极其频繁的;动态站点也要不断的加载 web 程序(php 等),一个请求甚至要读
取十几个文件才能处理完成,因此尽可能的提高硬盘速度和质量对提高 apache 的性能是有
积极意义的。
最后是 cpu 和网络,cpu 影响的是 web 程序执行速度,网络影响流量大小。
apache 的工作模式:
Apache HTTP 服务器被设计为一个强大的、灵活的能够在多种平台以及不同环境下工作的服
务器。这种模块化的设计就叫做“多进程处理模块”(Multi-Processing Module,MPM),也叫
做工作模式。
Prefork 模式(一个非线程型的):
其主要工作方式是:当 Apache 服务器启动后,mpm_prefork 模块会预先创建多个子进程(默
认为 5 个),每个子进程只有一个线程,当接收到客户端的请求后,mpm_prefork 模块再将
请求转交给子进程处理,并且每个子进程同时只能用于处理单个请求。如果当前的请求数将
超过预先创建的子进程数时,mpm_prefork 模块就会创建新的子进程来处理额外的请求。
Apache 总是试图保持一些备用的或者是空闲的子进程用于迎接即将到来的请求。这样客户
端的请求就不需要在接收后等候子进程的产生。
由于在 mpm_prefork 模块中,每个请求对应一个子进程,因此其占用的系统资源相对其他
两种模块而言较多。不过 mpm_prefork 模块的优点在于它的每个子进程都会独立处理对应
的单个请求,这样,如果其中一个请求出现问题就不会影响到其他请求。Prefork 在效率上
要比 Worker 要高,但是内存使用大得多不擅长处理高并发的场景。
Apache 在 prefork 工作模式下影响性能的重要参数说明
# prefork MPM
IfModule mpm_prefork_module
StartServers 5
#apache 启动时候默认开始的子进程数
MinSpareServers 5
#最小的闲置子进程数
MaxSpareServers 10
#最大的闲置子进程数
MaxRequestWorkers 250
#MaxRequestWorkers 设 置 了 允 许 同 时 的 最 大 接 入 请 求 数 量 。 任 何 超 过MaxRequestWorkers 限制的请求将进入等候队列,在 apache2.3.1 以前的版本
MaxRequestWorkers 被称为 MaxClients,旧的名字仍旧被支持。
MaxConnectionsPerChild 500
#设置的是每个子进程可处理的请求数。每个子进程在处理了“MaxConnectionsPerChild”
个请求后将自动销毁。0 意味着无限,即子进程永不销毁。虽然缺省设为 0 可以使每个
子进程处理更多的请求,但如果设成非零值也有两点重要的好处:1、可防止意外的内
存泄漏。2、在服务器负载下降的时侯会自动减少子进程数。因此,可根据服务器的负
载来调整这个值。在 Apache2.3.9 之前称之为 MaxRequestsPerChild。
/IfModule
注 1:MaxRequestWorkers 是这些指令中最为重要的一个,设定的是 Apache 可以同时处理
的请求,是对 Apache 性能影响最大的参数。如果请求总数已达到这个值(可通过 ps -ef|grep
http|wc -l 来确认),那么后面的请求就要排队,直到某个已处理请求完毕。这就是系统资源
还剩下很多而 HTTP 访问却很慢的主要原因。虽然理论上这个值越大,可以处理的请求就越
多,建议将初始值设为(以 Mb 为单位的最大物理内存/2),然后根据负载情况进行动态调整。
比如一台 4G 内存的机器,那么初始值就是 4000/2=2000。
注 2:prefork 控制进程在最初建立“StartServers”个子进程后,为了满足 MinSpareServers 设
置的需要创建一个进程,等待一秒钟,继续创建两 个,再等待一秒钟,继续创建四个……如
此按指数级增加创建的进程数,最多达到每秒 32 个,直到满足 MinSpareServers 设置的值为
止。这种模式 可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。
MaxSpareServers 设置了最大的空闲进程数,如果空闲进程数大于这个 值,Apache 会自动 kill
掉一些多余进程。这个值不要设得过大,但如果设的值比 MinSpareServers 小,Apache 会自
动把其调整为 MinSpareServers+1。如果站点负载较大,可考虑同时加大 MinSpareServers 和
MaxSpareServers。
注 3:ServerLimit 和 MaxClients(MaxRequestWorkers)有什么区别呢?
是因为在 apache1 时代,控制最大进程数只有 MaxClients 这个参数,并且这个参数最大值为
256,并且是写死了的,试图设置为超过 256 是无效的,这是由于 apache1 时代的服务器硬
件限制的。但是 apache2 时代由于服务器硬件的升级,硬件已经不再是限制,所以使用
ServerLimit 这个参数来控制最大进程数,ServerLimit 值=MaxClient 值才有效。ServerLimit
要放在 MaxClients 之前,值要不小于 MaxClients。
注 4:查看 Apache 加载的模块
[root@www ~]#apachectl -t -D DUMP_MODULES
或
[root@www ~]# apachectl -M
或
[root@www ~]# apachectl –l (小写 L,只显示静态模块)
如何查看 Apache 的工作模式呢?可以使用 httpd -V 命令查看,另外使用 httpd -l 也可以查
看到
注 5:如何修改 prefork 参数和启用 prefork 模式
1.[root@www ~]# vi /usr/local/http-2.4.23/conf/extra/httpd-mpm.conf
2.[root@www ~]# vi /usr/local/http-2.4.23/conf/httpd.conf
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
Include conf/extra/httpd-mpm.conf
3 重启httpd
Worker 模式(多线程多进程):
和 prefork 模式相比,worker 使用了多进程和多线程的混合模式,worker 模式也同样会先预
派生一些子进程,然后每个子进程创建一些线程,同时包括一个监听线程,每个请求过来会
被分配到一个线程来服务。线程比起进程会更轻量,因为线程是通过共享父进程的内存空间,
因此,内存的占用会减少一些,在高并发的场景下会比 prefork 有更多可用的线程,表现会
更优秀一些;另外,如果一个线程出现了问题也会导致同一进程下的线程出现问题,如果是
多个线程出现问题,也只是影响 Apache 的一部分,而不是全部。由于用到多进程多线程,
需要考虑到线程的安全了,在使用 keep-alive 长连接的时候,某个线程会一直被占用,即使
中间没有请求,需要等待到超时才会被释放(该问题在 prefork 模式下也存在)
总的来说,prefork 方式速度要稍高于 worker,然而它需要的 cpu 和 memory 资源也稍多于
woker。
Apache 在 worker 工作模式下影响性能的重要参数说明
# worker MPM
IfModule mpm_worker_module
StartServers 3
#apache 启动时候默认开始的子进程数
MinSpareThreads 75
#最小空闲数量的工作线程
MaxSpareThreads 250
#最大空闲数量的工作线程
ThreadsPerChild 25
#每个子进程产生的线程数量
MaxRequestWorkers 400
#与 prefork 模式相同
MaxConnectionsPerChild 0
#与 prefork 模式相同
/IfModule
注 1:Worker 由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的
ThreadsPerChild 线程数,各个线程独立地处理请求。同样, 为了不在请求到来时再生成线
程,MinSpareThreads 和 MaxSpareThreads 设置了最少和最多的空闲线程数;
而 MaxRequestWorkers 设置了同时连入的 clients 最大总数。如果现有子进程中的线程总数不
能满足负载,控制进程将派生新的子进程
MinSpareThreads 和 MaxSpareThreads 的最大缺省值分别是 75 和 250。这两个参数对 Apache
的性能影响并不大,可以按照实际情况相应调节 。
注 2:ThreadsPerChild 是 worker MPM 中与性能相关最密切的指令。ThreadsPerChild 的最大
缺省值是 64,如果负载较大,64 也是不够的。这时要显式使用 ThreadLimit 指令,它的最大
缺省值是 20000。
注 3:Worker 模式下所能同时处理的请求总数是由子进程总数乘以 ThreadsPerChild 值决定
的,应该大于等于 MaxRequestWorkers。如果负载很大,现有的子进程数不能满足时,控制
进程会派生新的子进程。默认最大的子进程总数是 16,加大时 也需要显式声明 ServerLimit
(系统配置的最大进程数量,最大值是20000)。需要注意的是,如果显式声明了 ServerLimit,
那么它乘以 ThreadsPerChild的值必须大于等于MaxRequestWorkers,而且MaxRequestWorkers
必须是 ThreadsPerChild 的整数倍,否则 Apache 将会自动调节到一个相应值。
注 4:进程与线程的区别
线程是指进程内的一个执行单元,也是进程内的可调度实体.
与进程的区别:
(1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程
有自己独立的地址空间;
(2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
(3)线程是处理器调度的基本单位,但进程不是.
(4)二者均可并发执行.
进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对
应用的并发性。
进程和线程的区别在于:
简而言之,一个程序至少有一个进程,一个进程至少有一个线程.
线程的划分尺度小于进程,使得多线程程序的并发性高。
另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程
序的运行效率。
Event 模式:
这是 Apache 最新的工作模式,是 worker 模式的变种,它把服务进程从连接中分离出来,一
worker 模式不同的是在于它解决了 keep-alive 长连接的时候占用线程资源被浪费的问题,在
event 工作模式中,会有一些专门的线程用来管理这些 keep-alive 类型的线程,当有真实请
求过来的时候,将请求传递给服务器的线程,执行完毕后,又允许它释放。这增强了在高并
发场景下的请求处理。event 模式不能很好的支持 https 的访问(HTTP 认证相关的问题)。
apache服务器默认的工作方式是的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于Apache服务器默认的工作方式是、apache服务器默认的工作方式是的信息别忘了在本站进行查找喔。
本文由admin于2022-12-20发表在靑年PHP官网,如有疑问,请联系我们。
本文链接:https://www.qnphp.com/post/159094.html