http服务详解(2)——httpd2.2的配置文件常见设置
摘要:一个服务的配置文件非常重要,弄懂配置文件是熟练掌握服务的必要前提。
一、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
模块文件路径 :
/etc/httpd/modules 软连接
/usr/lib64/httpd/modules
主程序文件:
/usr/sbin/httpd
/usr/sbin/httpd.worker
/usr/sbin/httpd.event
主进程文件 :服务起来后会自动生成,可以查进程pid,最后不要手动加
/etc/httpd/run/httpd.pid
日志文件目录:
/var/log/httpd
access_log: 访问日志
error_log :错误日志
帮助文档包:httpd-manual ,按完包后,重启服务,就能看帮助文档,没网也可以看
(2)httpd 配置文件的组成:修改前先备份,养成好习惯
# grep "Section" /etc/httpd/conf/httpd.conf 人为的分成3大段,方便管理,可以随便放
### Section 1: Global Environment 全局环境配置
### Section 2: 'Main' server configuration 主服务器
### Section 3: Virtual Hosts 虚拟主机,全是注释,默认没有
配置格式:directive(指令) value(值)
directive: 不区分字符大小写
value: 为路径时,是否区分大小写,取决于文件系统
二、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,默认80
Listen [IP:]PORT,不要随意更改,可以用于只想让特定的ip访问,不让其他人访问
(1) 省略IP 表示为0.0.0.0; 端口绑定所有ip
(2) Listen 指令至少一个,可重复出现多次,写多个,不能为空或注释掉,注释掉服务起不来
Listen 80
Listen 8080 写多个就可开启多个端口,但是访问的还是同一个网站
注意:改了端口,要在访问时加上自己改的端口
(3) 修改监听socket,重启服务进程方可生效
3、持久连接
Persistent Connection :连接持久建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成,默认关闭持久连接 KeepAlive Off
断开条件:数量限制:100
时间限制:以秒为单位, httpd-2.4 支持毫秒级
副作用:对并发访问量较大的服务器,持久连接功能会使用有些请求得不到响应
折中:使用较短的持久连接时间
设置: KeepAlive On|Off
KeepAliveTimeout 15
MaxKeepAliveRequests 100
测试:telnet WEB_SERVER_IP PORT
GET /URL HTTP/1.1 模仿报文首部
Host: WEB_SERVER_IP
4 、MPM( Multi-Processing Module )多路处理模块
(1)MPM 工作模式介绍:prefork、worker、 event(试验阶段)
① prefork :多进程I/O 模型,每个进程响应一个请求,默认模型
一个主进程 :生成和回收n个子进程 , 创建套接字,不响应请求
多个子进程:工作work 进程,每个子进程处理一个请求;系统初始时,预先生成多个空闲进程,等待请求,最大不超过1024个
② worker :复用的多进程I/O 模型, 多进程多线程,IIS 使用此模型
一个主进程: 生成m 个子进程,每个子进程负责生n个线程,每个线程响应一个请求 ,并发响应请求:m*n
③ event :事件驱动模型(worker 模型的变种)
一个主进程:生成m个子进程,每个进程直接响应n个请求,并发响应请求:m*n ,有专门的线程来管理这些keep-alive 类型的监控线程,当有真实请求时, 将请求传递给服务线程,执行完毕后,又允许释放 。这样增强了高并发场景下的请求处理力 能力
httpd-2.2: event 测试版 ,centos6 默认
httpd-2.4 :event 稳定版,centos7 默认
图示:
① prefork MPM
② worker MPM
③ event MPM
注意:httpd-2.2 不支持同时编译多个模块,所以只能编译时选定一个;rpm 安装的包提供三个二进制程序文件,分别用于实现对不同MPM 机制的支持
(2)确认方法:
ps aux | grep httpd
默认为/usr/sbin/httpd, 即prefork 模式
查看模块列表:
查看静态编译的模块
httpd -l
查看静态编译及动态装载的模块
httpd -M
动态模块加载:不需重启即生效
动态模块路径:/usr/lib64/httpd/modules
(3)更换使用的httpd 程序模块:
/etc/sysconfig/httpd 在这个文件中改
① HTTPD=/usr/sbin/httpd.worker 默认是被注释的,去掉注释就切换到worker程序了
重启服务生效
pstree -p|grep httpd 查看进程和线程
httpd.worker -l 模块换了,命令也换了
② Httpd 2.4 与之不同
以动态模块方式提供
配置文件:/etc/httpd/conf.modules.d/00-mpm.conf
httpd -M |grep mpm
重启服务 生效
pstree -p|grep httpd 查看进程和线程
(4)prefork 的默认配置:主配置文件中,搜索/prefork
<IfModule prefork.c> 根据工作环境设置
StartServers 8 一开启服务就准备8个进程
MinSpareServers 5 最小的空闲进程,先预留,不够就生成
MaxSpareServers 20 最大空闲进程
ServerLimit 256 最多进程数, 最大256
MaxClients 256 最大并发数
MaxRequestsPerChild 4000 子进程最多能处理的请求数量。在处理MaxRequestsPerChild 个请求之后, 子进程将会被父进程终止,这时候子进程占用的内存就会释放( 为0时永远不释放)
</IfModule>
(5) worker 的默认配置:主配置文件中,搜索/worker
<IfModule worker.c>
StartServers 4 一开启服务就准备4个进程,4x25=100线程
MaxClients 300 最多300个线程
MinSpareThreads 25 最小空闲25线程
MaxSpareThreads 75 最大空闲75线程,和上边冲突,开服务先开启4个进程,再杀死1个进程
ThreadsPerChild 25 每个子进程最大25个线程
MaxRequestsPerChild 0 无限制
</IfModule>
(6) 测试性能:ab命令 yum -y install httpd-tools
ab -c 100 -n 1000 http://192.168.30.106/
- c:并发连接数
-n:总的连接数
结果:发现prefork和worker性能没有什么较大的差异
5 、DSO:Dynamic Shared Object
加载动态模块配置:/etc/httpd/conf/httpd.conf 主配置文件
配置指定实现模块加载格式:搜索/LoadModule
LoadModule <mod_name> <mod_path>
模块文件路径可使用相对路径:相对于ServerRoot 服务的根(设置的为/etc/httpd)
httpd -M 可以查询模块信息,若删除或注释掉一个模块,那个模块的功能就会禁用,且httpd -M 查询不到
因此,当我们需要用PHP时,可以写入PHP的模块,就能使用了
示例:
LoadModule auth_basic_module
modules/mod_auth_basic.so
6 、定义'Main' server (主站点) 的文档页面路径
搜索/DocumentRoot
格式:DocumentRoot "/path"
作用:文档路径映射:
DocumentRoot 指向的路径为URL 路径的起始位置
注意:
① 可以写多行,但是下边的会覆盖上边的,最后还是使用下边的,写到自配置文件一样,因为子配置文件Include conf.d/*.conf在这行设置的上边,会被这行设置覆盖。
② 若设置的主站点不存在,那么服务会启动失败!
示例:
DocumentRoot "/app/site1"
http:/192.168.30.106/--> /app/site1/index.html
注意:SELinux 和iptables 的状态,要关掉
7、定义站点主页面
搜索:/DirectoryIndex
格式: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 、站点访问控制常见机制
可基于两种机制指明对哪些资源进行何种访问控制访问控制机制有两种:客户端来源地址,用户账号
① 文件系统路径:格式
<Directory "/path">
...
</Directory>
<Files "/path/file">
...
</Files>
<FilesMatch "PATTERN">
...
</FilesMatch>
例:主配置文件中,不能访问 .ht 开头的文件的设置
② URL 路径:支持正则,通配符
<Location "">
...
</Location>
<LocationMatch "">
...
</LocationMatch>
例:子配置文件,/etc/httpd/conf.d/welcome.conf 的设置
注意:支持正则,通配符
示例:
<FilesMatch "\.(gif|jpe?g|png)$"> 正则
<Files "?at.*"> 通配符
<Location /status> 绝对路径的目录
<LocationMatch "/(extra|special)/data">
9 、<Directory> 中"基于源地址"实现访问控制
(1) Options :后跟1 个或多个以空白字符分隔的选项列表,可在总配置文件中修改,也可从创建一个自配置文件中修改设置
在选项前的+ ,- 表示增加或删除指定选项
常见选项:
Indexes :指明的URL 路径下不存在与定义的主页面资源相符的资源文件时,上设置7,返回索引列表给用户,默认是不允许,加上不安全;有需要的时候,例如做yum源的时候
FollowSymLinks :允许访问符号所指向的源文件,例:链接文件,默认允许
None :全部禁用
All:全部允许
注意:若冲突,后边的设置会覆盖前边的
子目录也可以设置的和父目录不一样,放在下边
例:vim /etc/httpd/conf.d/test.conf 子配置文件
(2) AllowOverride,和上边实现的效果一样,就是把设置放在目录的隐藏文件下.htaccess
与访问控制相关的哪些指令可以放在指定目录下的.htaccess(由AccessFileName 指定)文件中,覆盖之前的,.htaccess是主配置文件中设置指定的
用法:vim /etc/httpd/conf.d/test.conf
只对<directory> 语句有效
AllowOverride All: 所有指令都有效
AllowOverride None :.htaccess 文件无效
AllowOverride AuthConfig Indexes 除了AuthConfig和Indexes的其它指令都无法覆盖
然后在.htaccess文件中设置,.htaccess放在所需要控制的目录下,例bbs目录
vim /app/site1/.htaccess
options +indexes -followsymlinks
(3) order 和allow 、deny,在2.4中已无效,有另外的权限控制
order :定义生效次序;写在后面的表示默认法则,覆盖,优先级高
Order allow,deny
Order deny,allow
Allow from, Deny from
来源地址的表达方法:IP、网络:
172.16
172.16.0.0
172.16.0.0/16
172.16.0.0/255.255.0.0
分析:① 若不冲突,allow,deny都产生效果,例
② 若冲突,看谁在后,在后的优先级高,但是只限于冲突的,
例:除107,这个网段的其他ip可以访问,但这个网段以外,都拒绝
③ 没在deny、allow中设置的,看allow/deny谁在后边,谁优先级高
10 、日志设定
日志类型:
访问日志
错误日志
错误日志:
ErrorLog logs/error_log
LogLevel warn
loglevel 可选值:
debug, info, notice, warn,error
crit, alert, emerg
访问日志:搜索:/LogForma
定义访问日志格式: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
各项设置的意思:可以随便改自己想要的
• %h 客户端IP 地址
• %l 远程用户, 启用mod_ident 才有效,通常为减号"-" "
• %u 验证(basic ,digest )远程用户, 非登录访问时,为一个减号"-"
• %t 服务器收到请求时的时间
• %r First line of request ,即表示请求报文的首行;记录了此次请求的"方法","URL" 以及协议版本
• %>s 最后的响应状态码
• %b 响应报文的大小,纯数据大小,单位是字节;不包括响应报文http 首部
• %{Referer}i 请求报文中首部"referer" 的值;即从哪个页面中的超链接跳转至当前页面的
防止倒链,i就是首部的意思
• %{User-Agent}i 请求报文中首部"User-Agent" 的值;即发出请求的应用程序
帮助文档里都有
查询日志:tail /var/log/httpd/access_log
11 、设定默认字符集
AddDefaultCharset UTF-8(全球) 默认
中文字符集:GBK, GB2312(中文简体), GB18030
12 、定义路径别名
格式: Alias /URL/ "/PATH/" /URL/有没有都无所谓,虚拟的目录
Alias /download/ "/rpms/pub/"
例:http://www.magedu.com/download/bash.rpm ==> /rpms/pub/bash.rpm
http://www.magedu.com/images/logo.png ==> /www/htdocs/images/logo.png
13 、status 页面
这个功能需要status_module 模块
httpd -M | grep status 查询这个模块有没有被加载
在总配置文件中搜索/server-status
LoadModule status_module modules/mod_status.so 这个模块在总配置文件有加载
<Location /server-status> 本来是注释掉的
SetHandler server-status2 这个名字随便写,只要访问时用这个名字就行
Order allow,deny
Allow from 192.168.30.0/24
</Location>
ExtendedStatus On 显示扩展信息,默认也是注释的
显示状态页面
状态的类型:
"-"等待连接 "S"启动 "R"处于读取状态
"W"发送应答 "K"保持长连接 "D"dns查询
"C"正处于关闭状态 "L"记录日志 "G"优雅的终止,温柔的断开
"r"把空闲的worker进程清理 "."没有正常的进程
http服务详解(2)——httpd2.2的配置文件常见设置的更多相关文章
- HTTPD之二————HTTPD服务详解————httpd的配置文件常见设置
HTTPD之二----HTTPD服务详解----httpd的配置文件常见设置 HTTP服务器应用 http服务器程序 httpd apache nginx lighttpd 应用程序服务器 IIS,a ...
- winxp计算机管理中服务详解
winxp计算机管理中服务详解01 http://blog.sina.com.cn/s/blog_60f923b50100efy9.html http://blog.sina.com.cn/s/blo ...
- Android中Service(服务)详解
http://blog.csdn.net/ryantang03/article/details/7770939 Android中Service(服务)详解 标签: serviceandroidappl ...
- WCF中队列服务详解
WCF中队列服务详解 一.引言 在前面的WCF服务中,它都要求服务与客户端两端都必须启动并且运行,从而实现彼此间的交互.然而,还有相当多的情况希望一个面向服务的应用中拥有离线交互的能力.WCF通过服务 ...
- 【转】SSH服务详解
[转]SSH服务详解 第1章 SSH服务 1.1 SSH服务协议说明 SSH 是 Secure Shell Protocol 的简写,由 IETF 网络工作小组(Network Working Gro ...
- (转)SSH服务详解
SSH服务详解 原文:http://www.cnblogs.com/clsn/p/7711494.html 第1章 SSH服务1.1 SSH服务协议说明SSH 是 Secure Shell Proto ...
- http协议详解及htt面试题目,常见的http状态码
http协议详解及htt面试题目,常见的http状态码 HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的.HTTP有两类报文:请求报文和响应报文. HTTP ...
- 详解在Word文档中常见的各种公式编辑问题
正常情况下,我们在安装完成MathType之后会直接加载在Word文档中,Word文档中的MathType比较复杂,新手操作遇到麻烦也是常有的事,今天就来给大家详解下Word文档中常见的MathTyp ...
- angular-ngSanitize模块-$sanitize服务详解
本篇主要讲解angular中的$sanitize这个服务.此服务依赖于ngSanitize模块. 要学习这个服务,先要了解另一个指令: ng-bing-html. 顾名思义,ng-bind-html和 ...
随机推荐
- 201521123008《Java程序设计》第五周实验总结
1.本章学习总结 2.书面作业 1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误.并分析输出结果. 不能.Sy ...
- java课程设计——猜数游戏
1.团队课程设计博客链接 http://www.cnblogs.com/springbreezemiles/p/7064135.html 2.个人负责模块或任务说明 本人任务: 编写主界面以及排行榜代 ...
- 201521123121 《Java程序设计》第13周学习总结
1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 1.两类传输协议:TCP:UDP TCP/IP协议的名称中只有TCP这个协议名,但是在TCP/IP的传输层 ...
- 万物皆对象的JavaScript
写在前面: 经过前段时间对于H5语言的学习,开始慢慢适应现在的生活节奏和代码语言.从一开始的毫无头绪到现在可以大概地写出部分的网站静态页面,用了两个周的时间.作为一个之前从未接触过计算机语言的初学者来 ...
- SharePoint备份文件
stp文件:SharePoint的.stp文件 在做一个和SharePoint有关的项目时,由于对SharePoint的unfamiliar,所以客户发了几个后缀为.stp的文件将我纳闷了半天,不 ...
- shell脚本命令,一些你在书上找不到的命令。
1.!$<!$是一个特殊的环境变量,它代表了上一个命令的最后一个字符串.如:你可能会这样: $mkdir mydir$mv mydir yourdir$cd yourdir 可以改成: $mkd ...
- Intellij idea插入表数据【在UI界面插入出错】
使用Intellij idea向数据库插入表数据的时候,如果该表是联合主键的,那么不能使用UI界面来进行插入-- 必须通过SQL语句才能插入-- 至于为什么?我也不知道-.搞了大半天--想省时间不写S ...
- JSP第二篇【内置对象的介绍、4种属性范围、应用场景】
什么是JSP内置对象 JSP引擎在调用JSP对应的jspServlet时,会传递或创建9个与web开发相关的对象供jspServlet使用.JSP技术的设计者为便于开发人员在编写JSP页面时获得这些w ...
- temp-重庆农商行二次出差
1, 住宿(远舰商务酒店) 与胡仕川一起住 1722房间, 178-27=151(返现后). 7月30日 7月31日 8月1日 8月2日 8月3日 2, 住宿(郎菲酒店)一个人住, 158 ...
- Routing in ASP.NET Core
.NET-Core Series Server in ASP.NET-Core DI in ASP.NET-Core Routing in ASP.NET-Core Error Handling in ...