Apache 的三种模式
prefork 多进程模式
一个主进程,负责生成多个子进程,也称工作进程,进程之间独立,每个进程之间只能有一个线程,优点是稳定,缺点是内存占用大,每个进程响应一个用户请求。
worker 多线程模式
一个主进程生多个子进程,每个子进程生成多个线程,默认25个,每个线程响应一个用户请求,优点:线程之间内存共享,内存利用率高,缺点:安全性稳定性较差,一个进程崩掉,整个进程内的线程都一起挂。
event 事件驱动模式
一个进程处理多个请求,前面两种模型在处理高并发请求时,很快会耗光服务器的可用进程,event 把进程进行分工,采用专用的进程来监听请求保持连接,因为保持连接只需要极少的资源。
查看运行的模式
httpd -V
源码安装时打开以下参数可动态更换
./configure --enable-mpms-shared=all
更换模式
编辑/etc/sysconfi/httpd
HTTPD=安装目录/bin/httpd.prefork或httpd.worker
源码安装时打开以下参数指定模式
./configure --with-mpm=prefork
源码安装时其它常用参数
./configure //配置源代码树
--prefix=/usr/local/apache2 //apache的安装目录。如果没有指定PREFIX,默认会装到/usr/local/apache2。
--enable-module=so //打开 so 模块,so 模块是用来提 dso 支持的 apache 核心模块
--enable-deflate=shared //支持网页压缩 页面请求,服务器把文本压缩,发送过去更快
--enable-expires=shared //支持 http 控制 过期,网站让浏览器缓存内容多久
--enable-headers //http的头
--enable-modules=moset //打开apache大部分模块
--with-pmp =worker 指定apache的worker工作模式,默认是prefork
--enable-rewrite=shared //支持 url 重写 伪静态
编译安装依赖
zlib-devel gcc gcc++ apr apr-devel pcre-devel
apache 启动停止
安装目录/bin/httpd -k start | stop | restart | graceful #等待请求完成后重开进程
httpd -t测试配置文件
yum 安装的可以systemctl start |stop httpd
修改MPM模块配置
Apace安装目录/conf/extra目录中有一个名为httpd-mpm.conf的配置文件,编辑将相应行的注释去掉
# Server-pool management (MPM specific)
#Include conf/extra/httpd-mpm.conf (去掉该行前面的注释符#)
------------------编辑httpd-mpm.conf----------------------
ServerLimit 150 #最大20000 大于等于MaxClients
StartServers 5 #开始进程数,推荐设置:小=默认 中=20~50 大=50~100
MinSpareServers 5 #最小空闲进程数,推荐设置:与StartServers保持一致
MaxSpareServers 10 #最大空闲进程数,推荐设置:小=20 中=30~80 大=80~120
MaxClients 150 #最大连接数推荐设置:小=500 中=500~1500 大型=1500~3000
MaxRequestsPerChild 0 #进程的生命周期,0永远不销毁。推荐设置:小=10000 中或大=10000~500000
(此外,还需额外设置ServerLimit参数,该参数最好与MaxClients的值保持一致。)
httpd 平均占用内存计算KB
ps aux |awk '/httpd/&&!/awk/&&!/root/{sum+=$6 ;n++};END{print sum/n}'
排除awk本身以及主进程(root用户),可能是其它特征。如平均占用10M
可以根据情况配置当前系统空闲内存的80%给apache使用,如32G物理内存,空闲28G,28*1024*0.8/10约为2000。
添加监听
在httpd.conf添加如下内容
//server-status 这个名字可以任意的取
SetHandler server-status
Order Deny,Allow
Deny from nothing //禁止的访问地址,nothing 表示没有禁止访问的地址
Allow from all //表示允许的地址访问;all 表示所有的地址都可以访问
ExtendedStatus On //表示的是待会访问的时候能看到详细的请求信息
SetHandler server-info
Order allow,deny
Deny from nothing
Allow from all
重启apache访问
http://IP地址:端口/server-status
http://IP地址:端口/server-info
http://IP地址:端口/server-status ?refresh=N
N将表示访问状态页面可以每N秒自动刷新一次
其它配置
ServerRoot "/etc/httpd"
用于指定Apache的运行目录,服务启动之后自动将目录改变为当前目录,在后面使用到的所有相对路径都是想对这个目录下
Listen 80
监听的端口,如有多块网卡,默认监听所有网卡
ServerAdmin root@localhost #管理员的邮箱,如果出现问题,会在首页显示
ServerName www.example.com:80
默认是不需要指定的,服务器通过名字解析过程来获得自己的名字,但如果解析有问题(如反向解析不正确),或者没有DNS名字,也可以在这里指定IP地址,当这项不正确的时候服务器不能正常启动。
启动Apache时候提示正在启动 httpd:httpd: apr_sockaddr_info_get() failed forjustin httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1forServerName。
解决方法就是启动该项把www.example.com:80修改为自己的域名或者直接修改为localhost
DocumentRoot "/var/www/html"
apache的默认web站点目录路径,结尾不要添加斜线
对根目录的限制
Options FollowSymLinks # followsymlinks表示允许使用符号链接,默认为禁用
AllowOverride None # 表示禁止用户对目录配置文件(.htaccess进行修改)重载,普通站点不建议开启
对/var/www/html目录的一个权限的设置
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
默认首页文件名
DirectoryIndex index.html index.html.var #指定所要访问的主页的默认主页名字,默认首页文件名为index.html
默认的网页的类型
DefaultType text/plain
控制不让web上的用户来查看.htpasswd和.htaccess这两个文件
Order allow,deny
Deny from all
Satisfy All
错误日志存放位置
ErrorLog "logs/error_log"
CustomLog "logs/access_log"