陈奇网络工作室

apache安装和运行模式

系统运输

博文的结构

安装apache

动作模式

一.编译并安装apache2.4.23

新版本的httpd-2.4中添加了以下功能。

添加模块; mod _ proxy _ fcgi (可提供fcgi代理) ) ) ) ) ) ) ) ) ) ) )0) 0

mod_ratelimit (用户带宽限制) )。

mod_request (请求模块,过滤请求) )。

mod_remoteip (匹配客户端的IP地址) ) ) ) ) )。

对基于IP的访问控制进行了更改,不再支持allow、deny和order机制,并使用require进行了集成

添加了以下新功能

1、MPM支持运行时加载; 但是,要打开此特性,必须在编译时启用这三个功能。 enable-mpms-shared=all-with-MPM=event

2、支持事件

3、支持异步读写

4、在各个模块和各个目录中指定日志级别

5、增强型表达式分析器

6、每项要求的构成: If、Elseif

7、毫秒级keepalive timeout

8、基于FQDN :不再需要虚拟主机namevirtualhost命令

9、支持使用自定义变量

安装环境:操作系统: Centos7.2,关闭selinux检查是否安装了httpd软件包,如果安装了,请卸载

下载源代码包

注意: apr(Apacheportableruntime ) Apache可移植运行库是操作系统调用的抽象库,实现了Apache内部组件在操作系统中的使用,提高了系统的可移植性。 安装apr和apr-util

解冻

[root@localhost media]# ls

apr-1.5.2.tar.gz cronolog-1.6.2.tar.gz OpenSSL-1.0.1u.tar.gz

apr-util-1.5.4.tar.gzhttpd-2.4.23.tar.gz pcre-8.39.tar.gz

[ root @ localhost media ] # tarzxfapr-1.5.2.tar.gz-c/usr/src /

[ root @ localhost media ] # tarzxfapr-util-1.5.4.tar.gz-c/usr/src /

[ root @ localhost media ] tarzxfzlib-1.2.8.tar.gz-c/usr/src /

[ root @ localhost media ] # tarzxfpcre-8.39.tar.gz-c/usr/src /

[ root @ localhost media ] # tarzxfhttpd-2.4.23.tar.gz-c/usr/src /

[ root @ localhost media ] # tarzxfopenssl-1.0.1 u.tar.gz-c/usr/src /

安装

[ root @ localhost src ] # CD/usr/src /

[root@localhost src]# ls

apr-1.5.2 apr-util-1.5.4 debug httpd-2.4.23 kernels OpenSSL-1.0.1 UPC re-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 /

[ 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/openslenable-shared

[ root @ www OpenSSL-1.0.1u ] # make make install

[ root @ www~] # mv/usr/bin/OpenSSL/usr/bin/OpenSSL.1.0.1 e

[ root @ www~] # ln-s/usr/local/OpenSSL/bin/OpenSSL/usr/bin/OpenSSL

安装apache2.4.23

[root@www ~]# cd httpd-2.4.23/

[ root @ wwwhttpd-2.4.23 ] #./configure-- prefix=/usr/local/http-2.4.23-- enable-so-enable-con pcre---with-z=/usr/local/zlib-with-apr=/usr apr-util-- enable-modules=most-- enable-MODS-shib。

[ root @ wwwhttpd-2.4.23 ] # make make install

[ root @ wwwhttpd-2.4.23 ] # ln-s/usr/local/http-2.4.23/bin/*/usr/local/bin /

\\\& quot; \& quot; 优化http程序的执行路径

[ root @ wwwhttpd-2.4.23 ] # ln-s/usr/local/http-2.4.23/bin/*/usr/local/bin

\\& quot; \& quot; \& quot; \& quot; 修改配置文件httpd.conf以设置ServerName的值

[ root @ www/] #/usr/local/http-2.4.23/apachectl start

[ root @ wwwhttpd-2.4.23 ] # CP/usr/local/http-2.4.23/bin/apachectl/etc/init.d/httpd

\\\\\& quot; 接通电源后会自动启动

[ root @ wwwhttpd-2.4.23 ] # VI/etc/init.d/httpd\\ & amp; quot; 添加以下两行,带#

#chkconfig:358515(3和5启动模式的--启动优先级) ) ) ) ) ) ) ) ) ) ) )。

# description: apache 2.4.23

[ root @ wwwhttpd-2.4.23 ] # chkconfig-- add httpd

[ root @ wwwhttpd-2.4.23 ] # chkconfighttpdon

\\\& quot; \& quot; \& quot; 添加Apache并自动启动

[ root @ wwwhttpd-2.4.23 ] # servicehttpdstart

[ root @ wwwhttpd-2.4.23 ] # netstat-an PLT|grep 80 TCP 6

0 0 :80 :* LISTEN 4807/httpd

参数说明:

--enable-so :支持动态共享模块。 也就是说,打开DSO支持)

-启用-重写:支持URL重写

--enable-SSL :支持SSL---with-SSL=/usr/local/OpenSSL :指定SSL的安装位置

- -启用CGI :启用CGI----启用cgid-: MPM使用event或worker启用cgid

- enable-modules=most :显式指定要静态编译为httpd二进制文件的模块。 MODULE-LIST是以空格分隔的模块名称列表、all或most,其中all包含所有模块,而most包含大多数常用模块

- enable-MODS-shared=most :显式指定要使用DSO方法编译的模块。 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的安装路径

apache优化和模块描述

所有运行apache的硬件环境都是对性能影响最大的因素,即使无法升级硬件,也最好给apache另一台主机,使其不受其他APP应用程序的干扰。 在每个硬件指标中,对性能影响最大的是内存,而对于静态内容(图像、javascript文件、css文件等),apache将决定可以缓存多少内容。 缓存的内容越多,硬盘读取内容的机会就越少,大内存可以大大提高静态站点的速度。 在动态高负载站点上,每个请求的保存时间都很长。 apache的mpm模块为每个请求派生相应的进程或线程来单独处理。 进程或线程的数量几乎与内存消耗成正比。 因此,增加内存对提高动态站点的负载和运行速度非常有利,其次是硬盘速度更高。 静态站点尤其如此,apache不断读取文件并将其发送到相应的请求,从而非常频繁地读写硬盘。 动态网站也需要不断加载web程序( php等),一个请求需要读取十几个文件才能完成处理,因此尽可能地提高HDD的速度和质量对提高apache的性能具有积极意义。 最后是cpu和网络。 cpu影响的是web程序的运行速度,而网络会影响流量的大小。

动作模式

Apache HTTP服务器设计为在各种平台和各种环境中运行的功能强大、灵活的服务器。 这种模块化设计称为“多进程模块”( 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|grephttpd\\\\查看进程

[ root @ www/] # apachectl-t\\\\ Jian语法检查

Prefork模式(非线程类型) ) ) ) ) )。

如何: Apache服务启动后,mpm_prefork模块将预创建多个子进程。 默认值为5个。 每个子进程只有一个线程,在接收到来自客户端的请求后,mpm_prefork模块将请求传递给子进程进行处理,每个子进程一次只能用于一个请求。 如果当前请求数超过预创建的子进程数,mpm_prefork模块将创建新的子进程以处理其他请求。

打开预定义模式:

[ root @ localhost~] # vim/usr/local/http-2.4.23/conf/httpd.conf

创建httpd的主配置文件并修改内容

include conf/extra/httpd-MPM.conf /默认的存在删除“#”即可

# load module MPM _ event _ module modules/mod _ MPM _ event.so

做//#记号

load module MPM _ prefork _ module modules/mod _ MPM _ prefork.so

//因为默认存在,所以删除#号码就可以了!

# load module MPM _ worker _ module modules/mod _ MPM _ worker.so

//这三行是apache的三种工作模式,根据情况切换

[ root @ localhost~] #重新启动systemctlrestarthttpd//httpd服务

[ root @ localhost~] # systemctlstarthttpd//请手动重新启动

[ root @ localhost~] #查看httpd-v//httpd的操作模式

//找到这一行就行了

Server MPM: prefork //可以看到当前Apache正在prefork模式下工作

[ root @ www~] # apachectll//小写l,仅显示静态模块)

修改prefork参数

[ root @ www~] # VI/usr/local/http-2.4.23/conf/extra/httpd-MPM.conf

设定prefork模式也只是这些参数,具体意义是:

IfModule mpm_prefork_module //这是prefork操作模式的参数-

启动StartServers 5 //apache时默认打开的子进程数

最小MinSpareServers 5 //空闲子进程数

MaxSpareServers 10 //空闲子进程的最大数量

设置了允许MaxRequestWorkers 250 //并发访问的最大请求数

MaxConnectionsPerChild 0 //0表示每个子进程在处理数据后不会丢弃进程,如果设置为非零,则可以避免内存泄漏,服务器在负载较小时自动减少自己的进程数

/IfModule

注意1:MaxRequestWorkers是这些命令中最重要的一个,它设置了可由Apache同时处理的请求,是对Apache性能影响最大的参数。 如果请求总数达到此值(可在ps -ef|grep http|wc -l中找到),则后续请求将排队,直到已处理的请求完成。 这是系统资源还剩下很多,HTTP访问却很慢的主要原因。 理论上,该值越大,可以处理的请求越多,但建议将初始值设置为(最大物理内存/2MB ),并根据负载情况动态调整。 例如4G内存的机器,初始值为4000/2=2000

注意2:prefork控制进程首先创建" StartServers "子进程,然后创建进程以满足MinSpareServers设置。 等待1秒钟,继续创建两个;再等待1秒钟,继续创建四个。 在满足MinSpareServers设置之前,最多将有32个进程以指数方式增长。在此模式下,请求到来时不需要生成新的进程,从而减少开销并提高性能。 MaxSpareServers设置了最大的空闲进程数。 当空闲进程数超过此值时,Apache会自动kill多余的进程。 这个值请不要太大。 但是,如果设置为小于MinSpareServers的值,Apache将自动调整为MinSpareServers 1。 如果站点负载较大,请考虑同时增大MinSpareServers和MaxSpareServers。

注3 :服务器限制和最大客户端( maxrequestworkers )之间的区别是什么? 因为在apache1时代,只有一个名为MaxClients的参数控制最大进程数,该参数的最大值为256,写入已死,并且尝试设置为超过256是无效的。 这是因为受到apache1时代服务器硬件的限制。 但是,在apache2时代,由于服务器硬件的升级,硬件不再受到限制,所以使用ServerLimit这个参数来控制最大进程数,使ServerLimit值=MaxClient值有效服务器限制放在MaxClients之前。 值大于或等于MaxClients

优点:成熟,兼容所有新老模块。 过程之间完全独立,因此非常稳定。 同时,不需要担心线程安全。 (我们常用的mod_php、PHP放大不需要支持线程安全。)

缺点:一个进程消耗相对多的系统资源,消耗更多的内存。 另外,我不擅长处理高并发请求。 在这种情况下,请求将排队并在有可用进程之前处理。

工作器模式(多线程多进程)

与prefork模式相比,工作器使用的是多进程和多线程混合模式。 worker模式也是如此,它先预派生一些子进程,然后每个子进程创建几个线程,同时包含一个监听线程,每个请求来临时分配给一个线程服务。 线程比进程更轻量。 由于线程共享父进程的内存空间,因此内存消耗较少,在高并发的场景中可以使用比prefork更多的线程,从而提高性能,而且如果一个线程出现问题,同一进程中的线程也会出现问题如果多个线程出现问题,也会影响Apache的一部分而不是全部。 因为使用多进程多线程,所以必须考虑线程的安全性。 使用keep-alive长连接时,某些线程总是被占用,即使中途没有请求,也必须等待超时。 这个问题在prefork模式下也存在。 一般来说,prefork方法比worker快一点,但需要cpu和内存资源

配置工作模式

自己修改httpd主配置文件,切换模式并重新启动服务,然后

[ root @ localhost~] # vim/usr/local/http-2.4.23/conf/extra/httpd-MPM.conf

IfModule mpm_worker_module //这是工作器操作模式的参数

启动StartServers 3 //apache时缺省启动的子进程数

MinSpareThreads 75 //最小空闲数的工作线程-

MaxSpareThreads 250 //最大空闲工作线程数-

每个ThreadsPerChild 25 //子进程生成的线程数

每个MaxRequestWorkers 400 //进程可接受的最大请求数

MaxConnectionsPerChild 0 //表示决不丢弃

/IfModule

Worker模式下可同时处理的请求总数由子进程总数乘以ThreadsPerChild值确定,且必须等于或大于MaxRequestWorkers。 如果负载过大,现有的子进程数无法满足,则控制进程会派生新的子进程。 缺省的最大子进程数为16,当它变大时,必须显式声明ServerLimit。 最大值为20000。 注意,如果明确声明了ServerLimit,则与ThreadsPerChild相乘的值必须大于或等于MaxRequestWorkers,并且MaxRequestWorkers必须是ThreadsPerChild的整数倍否则,Apache将自动调整为适当的值

优点:占用更少的内存,高并发性,性能更好。

缺点:由于多个子线程共享父进程的存储器地址,因此必须考虑线程安全问题。 如果使用keep-alive的长连接方式,中途可能几乎没有要求。 在这种情况下,必须等待,直到出现阻塞,线程挂起并超时。 如果线程过多,它们将以这种方式被占用,并且还可以在高并发场景中使用无服务器线程。 此问题在prefork模式下也同样发生。

事件模式多进程多线程epoll

这是Apache的最新操作模式,是worker模式的变种,它将服务进程与连接分离。 与worker模式不同,它解决了长keep-alive连接时线程资源浪费的问题。 event行为模式具有专用线程来管理这些keep-alive类型的线程。 如果有真相的话就拜托你了

请求时,将请求传递给服务器线程,执行完成后允许释放。 这增强了高并发场景下的请求处理。 event模式不能很好地支持对HTTPs的访问( http认证相关问题)。

进程和线程的区别

地址空间:进程中的执行单元进程至少有一个线程; 共享进程的地址空间进程有自己的地址空间

资源拥有:进程是资源分配和拥有的单元,同一进程中的线程共享进程的资源;

线程是处理器调度的基本单元,但进程不同;

两者都可以同时执行

详情请访问云服务器、域名注册、虚拟主机的问题,请访问西部数码代理商官方网站: www.chenqinet.cn

相关推荐

后台-系统设置-扩展变量-手机广告位-内容页底部广告位3