系统运输
博文的结构
安装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