摘要:一个服务的配置文件非常重要,弄懂配置文件是熟练掌握服务的必要前提。
一、httpd-2.2常见文件介绍
(1)配置文件:
主配置文件尽量别改,改自己的子配置文件
/etc/httpd/conf/httpd.conf 主配置文件
/etc/httpd/conf.d/*.conf 自配置文件
检查配置语法:
httpd -t 通用
service httpd configtest centos7不支持
服务脚本:/etc/rc.d/init.d/httpd
脚本配置文件:/etc/sysconfig/httpd
服务控制和启动:
chkconfig httpd on|off
service {start|stop|restart|status|configtest|reload} httpd
站点网页文档根目录:
/var/www/html
主进程文件 :服务起来后会自动生成,可以查进程pid,最后不要手动加
帮助文档包:httpd-manual ,按完包后,重启服务,就能看帮助文档,没网也可以看
# grep "Section" /etc/httpd/conf/httpd.conf 人为的分成3大段,方便管理,可以随便放
### Section 1: Global Environment 全局环境配置
### Section 2: 'Main' server configuration 主服务器
### Section 3: Virtual Hosts 虚拟主机,全是注释,默认没有
二、Httpd 2.2 常见配置:可以在官网或安装帮助包查看帮助
vim /etc/httpd/conf/httpd.conf 总配置文件
1、启动报错:提示没有名字fqdn
在总配置文件搜索 /ServerName,把注释去掉,随便写,最好写自己的网站名;启动就不报错了
修改后:
2、显示服务器版本信息
ServerTokens:管理响应首部信息的,显示服务器版本信息
搜索/ServerTokens,文件默认是OS,可以注释掉、删掉,有默认值full
ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full
配置文件在的设置 首部显示的信息
① ServerTokens Prod[uctOnly]:Server: Apache
② ServerTokens Major: Server:Apache/2
③ ServerTokens Minor: Server:Apache/2.0
④ ServerTokens Min[imal]: Server:Apache/2.0.41
⑤ ServerTokens OS: Server:Apache/2.0.41 (Unix)
⑥ ServerTokens Full (or not specified):Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2
This setting applies to the entire server and cannot be enabled or disabled on a virtualhost-by-virtualhost basis. After version 2.0.44, this directive also controls the information presented by the ServerSignature directive.
建议使用:ServerTokens Prod 安全,显示越详细越不安全
可以查看帮助信息,要安装httpd-manual包,帮助信息很详细
实例:cur -I 192.168.37.106 查询头部信息
3、修改监听的IP和Port
Listen [IP:]PORT,不要随意更改,可以用于只想让特定的ip访问,不让其他人访问
(2) Listen 指令至少一个,可重复出现多次,写多个,不能为空或注释掉,注释掉服务起不来
Listen 8080 写多个就可开启多个端口,但是访问的还是同一个网站
3、持久连接
Persistent Connection :连接持久建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成,默认关闭持久连接 KeepAlive Off
副作用:对并发访问量较大的服务器,持久连接功能会使用有些请求得不到响应
4 、MPM( Multi-Processing Module )多路处理模块
(1)MPM 工作模式介绍:prefork、worker、 event(试验阶段)
① prefork :多进程I/O 模型,每个进程响应一个请求,默认模型
一个主进程 :生成和回收n个子进程 , 创建套接字,不响应请求
多个子进程:工作work 进程,每个子进程处理一个请求;系统初始时,预先生成多个空闲进程,等待请求,最大不超过1024个
② worker :复用的多进程I/O 模型, 多进程多线程,IIS 使用此模型
一个主进程: 生成m 个子进程,每个子进程负责生成n个线程,每个线程响应一个请求 ,并发响应请求:m*n
一个主进程:生成m个子进程,每个进程直接响应n个请求,并发响应请求:m*n ,有专门的线程来管理这些keep-alive 类型的监控线程,当有真实请求时, 将请求传递给服务线程,执行完毕后,又允许释放 。这样增强了高并发场景下的请求处理力 能力
httpd-2.2: event 测试版 ,centos6 默认
httpd-2.4 :event 稳定版,centos7 默认
注意:httpd-2.2 不支持同时编译多个模块,所以只能编译时选定一个;rpm 安装的包提供三个二进制程序文件,分别用于实现对不同MPM 机制的支持
默认为/usr/sbin/httpd, 即prefork 模式
动态模块路径:/usr/lib64/httpd/modules
① HTTPD=/usr/sbin/httpd.worker 默认是被注释的,去掉注释就切换到worker程序了
② Httpd 2.4 与之不同
配置文件:/etc/httpd/conf.modules.d/00-mpm.conf
(4)prefork 的默认配置:主配置文件中,搜索/prefork
MinSpareServers 5 最小的空闲进程,先预留,不够就生成
MaxRequestsPerChild 4000 子进程最多能处理的请求数量。在处理MaxRequestsPerChild 个请求之后, 子进程将会被父进程终止,这时候子进程占用的内存就会释放( 为0时永远不释放)
(5) worker 的默认配置:主配置文件中,搜索/worker
StartServers 4 一开启服务就准备4个进程,4x25=100线程
MaxSpareThreads 75 最大空闲75线程,和上边冲突,开服务先开启4个进程,再杀死1个进程
ThreadsPerChild 25 每个子进程最大25个线程
(6) 测试性能:ab命令 yum -y install httpd-tools
ab -c 100 -n 1000 http://192.168.30.106/
结果:发现prefork和worker性能没有什么较大的差异
5 、DSO:Dynamic Shared Object
① 加载动态模块配置:/etc/httpd/conf/httpd.conf 主配置文件
② 格式:
LoadModule <mod_name> <mod_path>
模块文件路径可使用相对路径:相对于ServerRoot 服务的根(设置的为/etc/httpd)
③ httpd -M 可以查询模块信息,若删除或注释掉一个模块,那个模块的功能就会禁用,且httpd -M 查询不到
因此,当我们需要用PHP时,可以写入PHP的模块,就能使用了
6 、定义'Main' server (主站点) 的文档页面路径
DocumentRoot 指向的路径为URL 路径的起始位置
① 可以写多行,但是下边的会覆盖上边的,最后还是使用下边的,写到子配置文件一样,因为子配置文件Include conf.d/*.conf在这行设置的上边,会被这行设置覆盖。
http:/192.168.30.106/--> /app/site1/index.html
7、定义站点主页面
格式:DirectoryIndex index.html index.html.var
① 查询http://192.168.30.106/ 及其子目录时,不指定文件,可以默认打开目录下的index.html文件
② 若没有设置中的两个文件,看其他设置:下设置9,默认是报错;
有特定设置会显示特定设置,如首页;子配置文件 /etc/httpd/conf.d/welcome.conf 有设置,若只有 / 或多个,目录下没有index.html,就显示报错页面,welcome.conf这个设置优先级高,安全
8 、站点访问控制常见机制
可基于两种机制指明对哪些资源进行何种访问控制访问控制机制有两种:客户端来源地址,用户账号
例:子配置文件,/etc/httpd/conf.d/welcome.conf 的设置
<FilesMatch "\.(gif|jpe?g|png)$"> 正则
<LocationMatch "/(extra|special)/data">
9 、<Directory> 中"基于源地址"实现访问控制
(1) Options :后跟1 个或多个以空白字符分隔的选项列表,可在总配置文件中修改,也可从创建一个自配置文件中修改设置
Indexes :指明的URL 路径下不存在与定义的主页面资源相符的资源文件时,返回索引列表给用户,默认是不允许,加上不安全;有需要的时候,例如做yum源的时候
FollowSymLinks :允许访问符号所指向的源文件,例:链接文件,默认允许
例:vim /etc/httpd/conf.d/test.conf 子配置文件
(2) AllowOverride,和上边实现的效果一样,就是把设置放在目录的隐藏文件下.htaccess
与访问控制相关的哪些指令可以放在指定目录下的.htaccess(由AccessFileName 指定)文件中,覆盖之前的,.htaccess是主配置文件中设置指定的
用法:vim /etc/httpd/conf.d/test.conf
AllowOverride None :.htaccess 文件无效
AllowOverride AuthConfig Indexes 除了AuthConfig和Indexes的其它指令都无法覆盖
然后在.htaccess文件中设置,.htaccess放在所需要控制的目录下,例bbs目录
options +indexes -followsymlinks
(3) order 和allow 、deny,在2.4中已无效,有另外的权限控制
order :定义生效次序;写在后面的表示默认法则,覆盖,优先级高
例:除107,这个网段的其他ip可以访问,但这个网段以外,都拒绝
③ 没在deny、allow中设置的,看allow/deny谁在后边,谁优先级高
10 、日志设定
debug, info, notice, warn,error
定义访问日志格式:LogFormat format strings,
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog logs/access_log combined
http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats
• %l 远程用户, 启用mod_ident 才有效,通常为减号"-" "
• %u 验证(basic ,digest )远程用户, 非登录访问时,为一个减号"-"
• %r First line of request ,即表示请求报文的首行;记录了此次请求的"方法","URL" 以及协议版本
• %b 响应报文的大小,纯数据大小,单位是字节;不包括响应报文http 首部
• %{Referer}i 请求报文中首部"referer" 的值;即从哪个页面中的超链接跳转至当前页面的
• %{User-Agent}i 请求报文中首部"User-Agent" 的值;即发出请求的应用程序
查询日志:tail /var/log/httpd/access_log
AddDefaultCharset UTF-8(全球) 默认
中文字符集:GBK, GB2312(中文简体), GB18030
格式: Alias /URL/ "/PATH/" /URL/有没有都无所谓,虚拟的目录
例:http://www.magedu.com/download/bash.rpm ==> /rpms/pub/bash.rpm
http://www.magedu.com/images/logo.png ==> /www/htdocs/images/logo.png
httpd -M | grep status 查询这个模块有没有被加载
LoadModule status_module modules/mod_status.so 这个模块在总配置文件有加载
<Location /server-status> 本来是注释掉的
SetHandler server-status2 这个名字随便写,只要访问时用这个名字就行
ExtendedStatus On 显示扩展信息,默认也是注释的
"C"正处于关闭状态 "L"记录日志 "G"优雅的终止,温柔的断开
转载自:http://www.cnblogs.com/along21/p/7691642.html
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
不积跬步无以至千里