千家信息网

apache安装及工作模式

发表于:2024-11-28 作者:千家信息网编辑
千家信息网最后更新 2024年11月28日,博文结构安装apache工作模式一.编译安装apache2.4.23新版本的 httpd-2.4 新增以下特性;新增模块; mod_proxy_fcgi(可提供 fcgi 代理)mod_ratelim
千家信息网最后更新 2024年11月28日apache安装及工作模式

博文结构
安装apache
工作模式

一.编译安装apache2.4.23

新版本的 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、每请求配置:,
    7、毫秒级别的 keepalive timeout
    8、基于 FQDN 的虚拟主机不再需要 NameVirtualHost 指令
    9、支持使用自定义变量

  • 安装环境:操作系统:Centos7.2,关闭 selinux 检查 httpd 包是否安装,如查安装则卸载

下载源码包

注:apr(Apache Portable Runtime)Apache 可移植运行库,它是一个对操作系统调用的抽 象库,用来实现 Apache 内部组件对操作系统的使用,提高系统的可移植性。 安装 apr 和 apr-util

  • 解压缩
[root@localhost media]# lsapr-1.5.2.tar.gz       cronolog-1.6.2.tar.gz  openssl-1.0.1u.tar.gzapr-util-1.5.4.tar.gz  httpd-2.4.23.tar.gz    pcre-8.39.tar.gz[root@localhost media]# tar zxf apr-1.5.2.tar.gz -C /usr/src/[root@localhost media]# tar zxf apr-util-1.5.4.tar.gz  -C /usr/src/[root@localhost media]tar zxf zlib-1.2.8.tar.gz   -C /usr/src/[root@localhost media]# tar zxf pcre-8.39.tar.gz -C /usr/src/[root@localhost media]# tar zxf httpd-2.4.23.tar.gz -C /usr/src/[root@localhost media]# tar zxf openssl-1.0.1u.tar.gz -C /usr/src/
  • 安装
[root@localhost src]# cd /usr/src/[root@localhost src]# lsapr-1.5.2  apr-util-1.5.4  debug  httpd-2.4.23  kernels  openssl-1.0.1u  pcre-8.39[root@localhost src]# cd apr-1.5.2/[root@www apr-1.5.2]# ./configure --prefix=/usr/local/apr [root@www apr-1.5.2]# make && make install [root@www ~]# cd apr-util-1.5.4/ [root@www apr-util-1.5.4]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr [root@www apr-util-1.5.4]# make && make install
  • 安装zlib
[root@www ~]# cd zlib-1.2.8/ [root@www zlib-1.2.8]# ./configure --prefix=/usr/local/zlib [root@www zlib-1.2.8]# make && make install 
  • 安装pcre
[root@www ~]# cd pcre-8.39/[root@www pcre-8.39]# ./configure --prefix=/usr/local/pcre [root@www pcre-8.39]# make && make install 
  • 安装openssl

安装 apache2.4.23 时提示 openssl 版本过低,centos7 自带版本 openssl-1.0.1e

[root@www ~]# cd openssl-1.0.1u/
[root@www openssl-1.0.1u]# ./config -fPIC --prefix=/usr/local/openssl enable-shared
[root@www openssl-1.0.1u]# make && make install
[root@www ~]# mv /usr/bin/openssl /usr/bin/openssl.1.0.1e
[root@www ~]# ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl

  • 安装 apache2.4.23
[root@www ~]# cd httpd-2.4.23/ [root@www httpd-2.4.23]# ./configure --prefix=/usr/local/http-2.4.23 --enable-so --enable-cgi --enable-cgid --enable-ssl --with-ssl=/usr/local/openssl --enable-rewrite  --with-pcre=/usr/local/pcre --with-z=/usr/local/zlib --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mods-shared=most --enable-mpms-shared=all --with-mpm=event--enable-proxy --enable-proxy-fcgi --enable-expires --enable-deflate [root@www httpd-2.4.23]# make && make install [root@www httpd-2.4.23]# ln -s /usr/local/http-2.4.23/bin/* /usr/local/bin/ \\优化 http 程序执行路径 [root@www httpd-2.4.23]# ln -s /usr/local/http-2.4.23/bin/* /usr/local/bin\\修改配置文件 httpd.conf,设置其中的 ServerName 值 [root@www /]# /usr/local/http-2.4.23/apachectl start[root@www httpd-2.4.23]# cp /usr/local/http-2.4.23/bin/apachectl /etc/init.d/httpd \\开机后自动启动 [root@www httpd-2.4.23]# vi /etc/init.d/httpd   \\添加下面俩行带## chkconfig: 35 85 15 (在 3 和 5 启动模式下的--启动优先级)# description: apache 2.4.23 [root@www httpd-2.4.23]# chkconfig --add httpd [root@www httpd-2.4.23]# chkconfig httpd on\\将 Apache 加入开机自动启动[root@www httpd-2.4.23]# service  httpd start [root@www httpd-2.4.23]# netstat -anplt | grep 80 tcp6      0      0 :::80                   :::*       LISTEN      4807/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 二进制文件的模块,为 空格分隔的模块名列表、all 或者 most,all 表示包含所有模块,most 表示包含大部分常用模 块 --enable-mods-shared=most:明确指明要以 DSO 方式编译的模块,为空格分隔 的模块名列表、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 的安装路径 

二.apache的优化及模块解释

apache 所运行的硬件环境都是对性能影响最大的因素,即使不能对硬件进行升级,也最好 给 apache 一个单独的主机以免受到其他应用的干扰。各个硬件指标中,对性能影响最大的 是内存,对于静态内容(图片、javascript 文件、css 文件等),它决定了 apache 可以缓存多 少内容,它缓存的内容越多,在硬盘上读取内容的机会就越少,大内存可以极大提高静态站 点的速度;对动态高负载站点来说,每个请求保存的时间更多一些,apache 的 mpm 模块会 为每个请求派生出相应的进程或线程分别处理,而进程或线程的数量与内存的消耗近似成正 比,因此增大内存对提高动态站点的负载和运行速度也极为有利  其次是硬盘的速度,静态站点尤为突出,apache 不断的在读取文件并发送给相应的请求, 硬盘的读写是极其频繁的;动态站点也要不断的加载 web 程序(php 等),一个请求甚至要读 取十几个文件才能处理完成,因此尽可能的提高硬盘速度和质量对提高 apache 的性能是有 积极意义的。  最后是 cpu 和网络,cpu 影响的是 web 程序执行速度,网络影响流量大小。 
  • 工作模式

Apache HTTP 服务器被设计为一个强大的、灵活的能够在多种平台以及不同环境下工作的服 务器。这种模块化的设计就叫做"多进程处理模块"(Multi-Processing Module,MPM),也叫 做工作模式

注:如果要更改工作模式里面的进程需要到主配置文件里面把
[root@www ~]# vi /usr/local/http-2.4.23/conf/httpd.conf
Include conf/extra/httpd-mpm.conf \这条前面#去掉就可以更改进程了(大约在456页搜索mpm)

[root@www /]# ps -ef | grep httpd \看进程
[root@www /]# apachectl -t \jian检查语法

  • Prefork 模式(一个非线程型的)

其工作方式:当Apache服务启动后,mpm_prefork模块会预先创建多个子进程(默认为5个),每个子进程只有一个线程,当接收到客户端请求后,mpm_prefork模块再将请求转交给子进程进行处理,并且每个子进程同时只能用于单个请求。如果当前的请求数将超过预先创建的子进程数时,mpm_prefork模块就会创建新的子进程来处理额外的请求。

  • 开启prefork模式的方法:
[root@localhost ~]# vim /usr/local/http-2.4.23/conf/httpd.conf//编写httpd的主配置文件,修改一下内容Include conf/extra/httpd-mpm.conf                     //默认存在删除"#"号即可#LoadModule mpm_event_module modules/mod_mpm_event.so//添加#号LoadModule mpm_prefork_module modules/mod_mpm_prefork.so//默认存在,删除#号即可!#LoadModule mpm_worker_module modules/mod_mpm_worker.so//这三行便是apache的三种工作模式,可根据实际情况进行切换[root@localhost ~]# systemctl restart httpd      //重新启动httpd服务[root@localhost ~]# systemctl start httpd     //手动再启动一下[root@localhost ~]# httpd -V      //查看httpd的工作模式//找到这一行即可Server MPM:     prefork                //可以看到现在Apache工作在prefork模式[root@www ~]# apachectl -l  //小写 L,只显示静态模块)
  • 修改 prefork 参数
[root@www ~]# vi /usr/local/http-2.4.23/conf/extra/httpd-mpm.conf //设置prefork模式也就只有这几个参数,具体含义:            //这就是prefork工作模式的参数-    StartServers             5                //apache启动时默认开启的子进程数    MinSpareServers          5                  //最小的闲置子进程数    MaxSpareServers         10               //最大的闲置子进程数    MaxRequestWorkers      250        // 设置了允许同时的最大接入请求数量    MaxConnectionsPerChild   0         //0表示每个子进程处理完数据后进程永不销毁,设置成非0时,可防止内存泄漏,服务器在负载小时自动减少自己进程数

  • 注 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

优点:成熟,兼容所有新老模块。进程之间完全独立,使得它非常稳定。同时,不需要担心线程安全的问题。(我们常用的mod_php,PHP的拓展不需要支持线程安全)

缺点:一个进程相对占用更多的系统资源,消耗更多的内存。而且,它并不擅长处理高并发请求,在这种场景下,它会将请求放进队列中,一直等到有可用进程,请求才会被处理。

  • Worker 模式(多线程多进程)

和 prefork 模式相比,worker 使用了多进程和多线程的混合模式,worker 模式也同样会先预派生一些子进程,然后每个子进程创建一些线程,同时包括一个监听线程,每个请求过来会 被分配到一个线程来服务。线程比起进程会更轻量,因为线程是通过共享父进程的内存空间, 因此,内存的占用会减少一些,在高并发的场景下会比 prefork 有更多可用的线程,表现会 更优秀一些;另外,如果一个线程出现了问题也会导致同一进程下的线程出现问题,如果是 多个线程出现问题,也只是影响 Apache 的一部分,而不是全部。由于用到多进程多线程, 需要考虑到线程的安全了,在使用 keep-alive 长连接的时候,某个线程会一直被占用,即使 中间没有请求,需要等待到超时才会被释放(该问题在 prefork 模式下也存在) 总的来说,prefork 方式速度要稍高于 worker,然而它需要的 cpu 和 memory 资源也稍多于 woker。

  • work模式的配置
/自行修改httpd主配置文件,切换模式并重启服务,接下来[root@localhost ~]# vim /usr/local/http-2.4.23/conf/extra/httpd-mpm.conf        //这是worker工作模式的参数    StartServers             3                  //apache启动时默认开始的子进程数    MinSpareThreads         75            //最小空闲数量的工作线程-    MaxSpareThreads        250          //最大空闲数量的工作线程-    ThreadsPerChild         25              //每个子进程产生的线程数量    MaxRequestWorkers      400        //每个进程最大接受的请求数量    MaxConnectionsPerChild   0         //表示永不销毁

Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild 值决定的,应该大于等于MaxRequestWorkers。如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进程。默认最大的子进程总数是16,加大时 也需要显式声明ServerLimit(最大值是20000)。需要注意的是,如果显式声明了ServerLimit,那么它乘以 ThreadsPerChild的值必须大于等于MaxRequestWorkers,而且MaxRequestWorkers必须是ThreadsPerChild的整数倍,否则 Apache将会自动调节到一个相应值。

优点:占据更少的内存,高并发下表现更优秀。

缺点:必须考虑线程安全的问题,因为多个子线程是共享父进程的内存地址的。如果使用keep-alive的长连接方式,也许中间几乎没有请求,这时就会发生阻塞,线程被挂起,需要一直等待到超时才会被释放。如果过多的线程,被这样占据,也会导致在高并发场景下的无服务线程可用。(该问题在prefork模式下,同样会发生)。

  • Event 模式 多进程+多线程+epoll

这是 Apache 最新的工作模式,是 worker 模式的变种,它把服务进程从连接中分离出来,一 worker 模式不同的是在于它解决了 keep-alive 长连接的时候占用线程资源被浪费的问题,在 event 工作模式中,会有一些专门的线程用来管理这些 keep-alive 类型的线程,当有真实请
求过来的时候,将请求传递给服务器的线程,执行完毕后,又允许它释放。这增强了在高并 发场景下的请求处理。event 模式不能很好的支持 https 的访问(HTTP 认证相关的问题)。

  • 进程与线程的区别
地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源;线程是处理器调度的基本单位,但进程不是;二者均可并发执行;
进程 线程 模式 模块 工作 最大 处理 支持 内存 服务 参数 文件 问题 同时 系统 资源 配置 个子 数量 速度 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 客户服务器和客户机服务器 5G书籍软件开发 赛虎网络安全公司 网络安全四个区域 uml和软件开发的关系 被ppp服务器断开连接 怎么把数据库文件导出来吗 企业十四五网络安全规划方案 网络安全毕业论文指导记录表 为什么服务器托管贵 富士康康软件开发 数据库密码对了为什么还是连不上 网络技术题中职 fm2021如何更新数据库 中国移动的服务器是谁的 网络服务器的硬件有哪些 网络安全测评师是程序员吗 计算机网络安全发展 数据库中的esc是什么意思 新乡聚乾网络技术 广州新华互联网科技学校是全日制 网络安全消息鉴别的概念 嵌入式软件开发考研方向 数据库中没有定义标签是什么意思 通信网络技术对文化有要求吗 我的世界网易版服务器生存密码 青软管理软件开发培训 南京蓝色光标网络技术有限公司 服务器托管租用 网络技术专业能进公务员吗
0