本文主要讲述httpd的主配置文件中可以配置的选项以及参数,以2.2系列的为主,在http2.4以后会添加一些新的功能和模块,配置文件可能也会有一些差别,关于2.4的配置文件将在后续推出,敬请期待!
如果httpd是yum安装或者是rpm包安装的话,主配置文件会默认保存在/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf为主配置文件的辅助性配置文件
1、监听套接字
Listen [IP:]port
此指令可以出现多次,用于指定监听多个不同的套接字,IP地址可以省略,如果IP地址省略则表示监听在本机所有的ip地址上
2、配置实用Keepalive,主要是配置保持连接中的超时时间和最大连接数
KeepAlive {On|Off}
KeepAliveTimeout 2 超时时间为2s,单位默认为s
MaxKeepAliveRequests 50 最大连接数
3.MPM,为多道处理模块
prefork:一个进程响应一个请求
worker:一个进程生成多个线程,一个线程响应一个请求
event:一个进程同事响应多个请求,但不会生成线程
http -l 查看编译进内核的模块
如果向使用不同的MPM,直接修改文件/etc/sysconfig/httpd文件中的HTTPD项即可
<IfModule preforck.c> 判断模块是否存在
StartServers 默认启动的工作进程数
MinSpareServers 最少空闲进程数
MaxSpareServers 最大空闲进程数
ServerLimit 最大活动进程数
MaxClients 最大并发连接数,最多允许发起的连接请求个数
MaxRequestsPerChild 每个子进程在生命周期内最大允许服务的请求个数
</IfModule>
<IfModule worker.c>
StartServers 默认启动的工作进程数
MaxClients 最大并发连接数
MinSpareThreads 最少空闲线程数
MaxSpareThreads 最多空闲线程数
ThreadsPerChild 每个自己进程生成的线程数
MaxRequestsPerChild 每个子进程在生命周期内最大允许服务的请求个数
</IfModule>
4.DOS模块的加载方式,动态模块
LoadModule module_name /path/to/module
可以使用绝对路径,也可以使用相对路径,如果使用相对路径,则是相对于ServerRoot所定义的位置而言的
httpd -m 列出所有已加载的DOS模块与非DOS模块
5.配置站点根目录
DocumentRoot /path/to/somewhere
只能使用绝对路径
6.页面访问属性
<Direcotry "/path/to/somewhere">
Options 选项
Indexes:缺少指定的默认主页时,允许将目录中的所有文件以列表形式返回给用户,危险:慎用
FollowsymLinks:允许跟随符号链接所指向的岁暗示文件
None:所有的都不启用
All: 所有的都启用
ExecCGI: 允许使用mod_cgi模块执行CGI脚本
Includes: 允许mod_include模块实现服务器端包含
IncludesNOEXEC:允许包含但不允许执行CGI脚本
MultiViews:允许使用mod_negotication实现内容协商
SymLinksIfOwnerMatch:在链接文件属主属组与原始文件的属主属组相同时,允许跟随符号连接所指向的原始文件
</Direcotry>
7.基于主机的访问控制(2.2系列的配置)
<Direcotry "/path/to/somewhere">
Options
AllowOverride
None 不禁用下面选项
Order 次序,写在后面的为默认
allow,deny: 没有允许的都拒绝
deny,allow:没有拒绝的都允许
Allow from 允许通过的主机
Deny from 拒绝通过的主机
可以是单独的ip地址,也可以是一个网段
192.168.0
192.168.0.0
192.168.0.0/24
192.168.0.0/255.255.255.0
表示的都为192.168.0网段
</Direcotry>
如果都匹配或都不匹配时则以默认的为准,否则以匹配到的为准
8.定义默认主页面
DirectoryIndex
查询顺序为依次查询
9.用户目录
如果期望让每个用户都可以创建个人站点,基于http://Sevrer_IP/~Username/
userdir disablied:禁止
userdir public_html: 是指用户家目录下的目录名称,所有位于此目录中的文件均可以通过前述的访问路径进行访问
用户的家目录得赋予运行http进程的用户拥有执行权限,可以通过setfacl -m来进行设置
10.配置日志功能
access.log 访问日志,其需要记录的内容需要自定义
error.log 错误日志,
访问日志:
CustomLog "/path/to/log_file" LogFormat
LofFormat定义的日志格式,只解释最常用的一种
"%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
%h: 客户端地址
%l:远程的登陆名,通常为-
%u: 认证时的远程用户名,通常为-
%t: 接收到的请求时的时间,为标准英文格式时间+时区
\":表示转义,显示"
%r:请求报文的起始行
%>s: 响应状态码
%b:以字节响应报文的长度,不包含头报文
%{Referer}i:记录指定请求报文首部的内容
%{User-Agent}i:用户使用的工具
详情请参考:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats
11.路径别名
Alias /alias/ "/path/to/somewhere"
意味着访问http://Server_IP/alias时,其页面文件来自于/path/to/somewhere中
12.指定默认的字符集
AddDefaultCharset
13.脚本路径别名(CGI接口)
CGI:Common Gateway Interface(通用网关接口)使web可以跟一个应用程序进行通信,从通信环境中获得结果,前提必须加载mod_alias和mod_cgi模块
一般在第一行写入 echo “Content-Type:text/html”
ScriptAlias /URL/ "/path/to/somewhere" somewhere下的文件可以被执行
格式一般为
cat << EOF
Content-Type:text/html
<pre>
The Time is : `date`
</pre>
EOF
14.基于用户的访问控制
虚拟用户:不是系统上的用户,只是为了获取某种特定的资源烈性的一种虚拟用户
可以基于文件、SQL数据库、DBM、ldap认证
认证类型(auth)
basic:基本认证,账号和密码以明文发送
digest:摘要认证,hash编号以后再发送
认证提供者(authentiation provide):账号和密码的存放位置
授权机制(authorization):根据什么进行授权
案例:基于文件,做基本认证根据用户和组进行授权
1、编辑配置文件,为需要认证的目录配置认证机制
<Directory "/www/htdocs/fin">
options None
AllowOverride AuthConfig 使用认证配置
AuthType Basic 使用基本认证
AuthName "Private Area" 质询时标题
AuthUserFile /etc/http/conf/.htpasswd 密码的存放位置
Require vaild-user 可访问的用户
</Directory>
2、使用htpsswdm命令使用生成认证库
htpasswd
-c 创建密码,创建第一个用户时使用
htpasswd -c -m /etc/http/conf/.htpasswd tom
-m MD5格式存放
-b 批量模式
-D 删除用户
3、基于组认证
<Directory "/www/htdocs/fin">
options None
AllowOverride AuthConfig 使用认证配置
AuthType Basic 使用基本认证
AuthName "Private Area" 质询时标题
AuthgroupFile /etc/http/conf/.htpasswd 密码的存放位置
Require group GroupName 可访问的用户
</Directory>
先创建用户,在创建组
组文件:
组名:用户1 用户2 用户3
15.虚拟主机
一个物理服务器提供多个站点;使用虚拟要先取消中心主机
基于不同的IP实现不同的虚拟主机:变化IP
基于不同的port实现不同的虚拟主机:变化port
基于不同的主机名实现不同的虚拟主机:变化ServerName的值
通过请求报文中的HOST来实现不同的虚拟主机的访问
<VirtualHost IP:port>
SeverName
DocumentRoot ""
<Directory "">
</Directory>
ServerAlias
ServerAdmin
</VirtualHost>
虚拟主机可以单独配置用户认证、访问日志、错误日志、别名、脚本别名等
16.https协议,监听在tcp的443端口
X509.3证书格式
证书格式的版本号
证书序列号
证书签名算法
证书颁发者
有效期
持有者的名称
持有者的公钥
CA的ID
持有者的ID
其他扩展信息
基本约束
证书策略
密钥的使用限制
CA签名
ssl握手要完成的工作
交换协议版本号
选择一个双方都支持的加密方式
对两端实现身份验证
密钥交换
SSL会话基于IP地址进行:不支持在基于主机名的虚拟主机上实现
客户端验证服务器端证书时:
日期检查:证书是否在有效期内
证书颁发者的可信度
证书的签名检测:
持有者的身份检测:
httpd:基于mod_ssl模块实现对于ssl的支持
步骤:
1)、准备好服务器的私钥和证书
2)、安装mod_ssl模块
yum -y install mod_ssl
3)、配置/etc/httpd/conf.d/ssl.conf
配置基于ssl的虚机主机
ServerName
DocunmentRoot
配置证书和私钥
SSLCertificatFile 证书文件
SSLCertificatKeyFile 密钥文件
4)、重启httpd服务
5)、测试
openssl s_client
-connet:验证的地址:端口
-CAfile:CA证书的路径
17.服务器status页面,
内生的status信息,且此信息可以通过web予以显示出来
基于目录的访问属性
<Directory [~] "">
</Directory>
基于URL访问属性
<Location [~] "">
</Location>
基于单个文件的访问属性
<File [~] "">
</File>
也可以使用<LocationMatch "" > </LocationMatch>来实现正则表达式的配置
如果要配置其属性的URL能映射到牟文建系统路径,建议使用Directory
处理器:当问及被调用时,Apache内部表现形式,一般每种文件类型都有其隐式处理器,否则需要自己定义
显示的定义使用的处理器:SetHandler
<Location /URL>
SetHandler server-status
</Location>
其也可以定义访问控制,包括基于IP的认证和基于用户的认证
实例:
<Location /server-status>
SetHandler sever-status
AuthType Basic
AuthName "Sever Status"
AuthUserFile "/etc/http/conf/.htpasswd"
Require valid-user
Order deny,allow
Allow from all
</Location>
18、使用mod_deflate模块压缩页面优化传输速度,可以写为一行,也可以写多行,默认为gzip
SetOutputFilter DEFLATE
<IfModule mod_deflate.c>
# Restrict compression to these MIME types
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/css
# Level of compression (Highest 9 - Lowest 1)默认为6
DeflateCompressionLevel 9
# Netscape 4.x has some problems.
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
</IfModule>
18、资源限定
软限制:可以超出的限制,但仅能超出一定时长
硬限制:绝对不能超出的限制
ulinit:只能修改软连接
-n [N]:显示或修改能打开的最大的文件句柄数
-u [N]:显示或修改能打开的最大进程数
如果要修改硬限制
/etc/security/limits.conf或者配置tc/security/limits.d/*.conf
格式为
对谁进行限制 类型 要限制的选项 值
测试工具
curl是基于URL语法在命令行方式下工作的文件传输工具,它支持FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE及LDAP等协议。curl支持HTTPS认证,并且支持HTTP的POST、PUT等方法, FTP上传, kerberos认证,HTTP上传,代理服务器, cookies, 用户名/密码认证, 下载文件断点续传,上载文件断点续传,,http代理服务器管道( proxy tunneling), 甚至它还支持IPv6, socks5代理服务器,,通过http代理服务器上传文件到FTP服务器等等,功能十分强大。
curl的常用选项:
-A/--user-agent <string> 设置用户代理发送给服务器,即告诉服务器浏览器为什么
-basic 使用HTTP基本验证
--tcp-nodelay 使用TCP_NODELAY选项
-e/--referer <URL> 来源网址,跳转过来的网址
--cacert <file> 指定CA证书 (SSL)
--compressed 要求返回是压缩的形势,如果文件本身为一个压缩文件,则可以下载至本地
-H/--header <line>自定义头信息传递给服务器
-I/--head 只显示响应报文首部信息
--limit-rate <rate> 设置传输速度
-u/--user <user[:password]>设置服务器的用户和密码
-0/--http1.0 使用HTTP 1.0
测试工具
ab工具的初步使用
-c 模拟的并发数
-n 模拟的总请求数
一般并发数应该小于等于请求数
http_load webbench seige(只做参考)
http的扩展功能
apachectl
Apache HTTP服务控制工具
ab
Apache HTTP服务器性能测试工具
apxs
Apache 扩展工具
configure
配置源代码
dbmmanage
为基本认证创建和更新DBM格式的用户认证文件
htcacheclean
清理磁盘缓存
htdigest
为摘要认证创建和更新用户认证文件。
htdbm
操作 DBM 密码数据库。
htpasswd
为基本认证创建和更新用户认证文件。
httxt2dbm
为 RewriteMap 创建 dbm 文件。
logresolve
将 Apache 日志文件中的 IP 地址解析到主机名称。
rotatelogs
不关闭 Apache 而切换日志文件。
suexec
执行外部程序前切换用户。