CentOS 6:httpd-2.2
程序环境:
配置文件:
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf
服务脚本:
/etc/rc.d/init.d/httpd
脚本配置文件:/etc/sysconfig/httpd
主程序文件:
/usr/sbin/httpd
/usr/sbin/httpd.event
/usr/sbin/httpd.worker
日志文件:
/var/log/httpd:
access_log:访问日志
error_log:错误日志
站点文档:
/var/www/html(页面文件)
模块文件路径:
/usr/lib64/httpd/modules
服务控制和启动:
chkconfig httpd on|off
service {start|stop|restart|status|configtest|reload} httpd
常用配置:
1、修改监听的IP和PORT
# vim /etc/httpd/conf/httpd.conf
(1) 省略IP表示为0.0.0.0;
(2) Listen指令可重复出现多次;
Listen 80
Listen 8080
(3) 修改监听socket,重启服务进程方可生效;
注意:改配置文件需要重启服务 service httpd restart
netstat -tnlp(查看当前启动的服务所用的端口)
2、持久连续
tcp连续建立后,每个资源获取完成后不全断开连接,而是继续等待其它资源请求的进行;
副作用:对并发访问量较大的服务器,长连接机制会使得后续某些请求无法得到正常 响应;
折衷:使用较短的持久连接时长,以及较少的请求数量;
KeepAlive On|Off(是否开启持久连续)
KeepAliveTimeout 15(时间限制)
MaxKeepAliveRequests 100(数量限制)
# vim /etc/httpd/conf/httpd.conf
重启服务 service httpd restart
3、MPM
httpd-2.2不支持同时编译多个MPM模块,所以只能编译选定要使用的那个;
CentOS 6的rpm包为此专门提供了三个应用程序文件:
httpd(prefork), httpd.worker, httpd.event
查看现在使用的是哪个程序文件的方法启动了多少进程:
# ps aux | grep httpd
第一行为主控进程(管理进程的创建和销毁)
默认使用的为/usr/sbin/httpd,其为prefork的MPM模块 ;
查看httpd程序的模块列表:
查看静态编译的模块:
# httpd -l
查看静态编译及动态编译的模块:
# httpd -M
更换使用httpd程序,以支持其它MPM机制;
# vim /etc/sysconfig/httpd
HTTPD=/usr/sbin/httpd.{worker,event}
注意:重启服务进程方可生效
# service httpd restart
MPM配置:
# vim /etc/httpd/conf/httpd.conf
prefork的配置
<IfModule prefork.c>(如果prefork存在)
StartServers 8(启动多少空闲进程)
MinSpareServers 5(最少空闲进程数)
MaxSpareServers 20(最大空闲进程)
ServerLimit 256(允许MaxClients最大启动的进程数量)
MaxClients 256(最大允许启动的进程数量)
MaxRequestsPerChild 4000(每个进程最多可处理多少请求,处理了4000个就要销毁此进程)
</IfModule>
worker的配置:
<IfModule worker.c>
StartServers 4(启动多少空闲进程)
MaxClients 300(最大允许启动的进程数量)
MinSpareThreads 25(最少空闲进程数)
MaxSpareThreads 75(最多空闲进程数)
ThreadsPerChild 25(每个主进程最大可生成多少线程)
MaxRequestsPerChild 0(每个进程可处理无上限的请求)
</IfModule>
PV,UV
PV:Page View(页面浏览量)
UV: User View(用户浏览量)
4、DSO(动态共享模块)
配置指定实现模块加载
LoadModule <mod_name> <mod_path>(模块文件路径)
模块文件路径可使用相对路径:
相对于ServerRoot(默认/etc/httpd)
5、 定义访问主文档页面路径
# vim /etc/httpd/conf/httpd.conf
DocumentRoot " "
文档路径映射:
DoucmentRoot指向的路径为URL路径的起始位置
其相当于站点URL的根路径;
注意:重启服务进程方可生效
# service httpd restart
6、站点访问控制常见机制
# vim /etc/httpd/conf/httpd.conf
可基于两种机制指明对哪些资源进行何种访问控制
文件系统路径:
<Directory "">
...
</Directory>
<File "">
...
</File>
<FileMatch "PATTERN">
...
</FileMatch>
URL路径:
<Location "">
...
</Location>
<LocationMatch "">
...
</LocationMatch>
<Directory>中“基于源地址”实现访问控制:
(1) Options
后跟1个或多个以空白字符分隔的“选项”列表;
Indexes:指明的URL路径下不存在与定义的主页面资源相符的资源文件时,返回索引列表给用户;(建议关掉)
FollowSymLinks:允许跟踪符号链接文件所指向的源文件(建议关掉);
None:一个也没有
All:全部
建议改为:Options None
(2) AllowOverride(允许覆盖)
与访问控制相关的哪些指令可以放在.htaccess文件(每个目录下都可以有一个)中;
All: 全部
None:一个也没有
建议改为:AllowOverride None
(3) order和allow、deny拒绝
order:定义生效次序;写在后面的表示默认法则;
Allow from来源地址, Deny from来源地址
来源地址:
IP
NetAddr:(网络地址)
172.16
172.16.0.0
172.16.0.0/16
172.16.0.0/255.255.0.0
1、e.g.设置为仅允许172.16网段的主机访问:Allow from 172.16
2、e.g.Deny from 172.16.100.88
Allow from 172.16
(仅允许172.16网段的主机访问,但 172.16.100.88这台不能访问)
7、定义站点主页面:
# vim /etc/httpd/conf/httpd.conf
DirectoryIndex index.html index.html.var(先找index.html没有找到,就找index.html.var)
8、定义路径别名
# vim /etc/httpd/conf/httpd.conf
格式:
Alias /URL/ "/PATH/TO/SOMEDIR/"
DocumentRoot "/www/htdocs"
http://www.magedu.com/download/bash-4.4.2-3.el6.x86_64.rpm
/www/htdocs/download/bash-4.4.2-3.el6.x86_64.rpm
Alias /download/ "/rpms/pub/"
http://www.magedu.com/download/bash-4.4.2-3.el6.x86_64.rpm
/rpms/pub/bash-4.4.2-3.el6.x86_64.rpm
http://www.magedu.com/images/logo.png
/www/htdocs/images/logo.png
9、设定默认字符集(为防止“语言”不通,响应的页面看不懂。)
AddDefaultCharset UTF-8
中文字符集:GBK, GB2312, GB18030
10、日志设定
日志类型:访问日志 和 错误日志
错误日志
ErrorLog logs/error_log
LogLevel warn(警告)
错误级别: debug(所有错误的都记录下来), info(比debug更高级), notice(引起关注), warn(警告), error(发生错误), crit(级别很严重), alert(红色警戒), emerg(紧急事务).
访问日志:查看访问日志:#tail /var/log/httpd/access_log
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog logs/access_log combined
LogFormat format strings:(LogFormat格式符意思)
http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats
%h:客户端IP地址;
%l:客户端用户名, 通常为一个减号(“-”);
%u:客户端用户 (from auth; may be bogus if return status (%s) is 401);非为登录访问时,其为一个减号;
%t:服务器收到请求时的时间;
%r:First line of request,即表示请求报文的首行;记录了此次请求的“方法”、“URL”以及协议版本;
%>s:响应状态码;
%b:响应报文的大小,单位是字节;不包括响应报文的http首部;
%{Referer}i:请求报文中首部“referer”的值;referer即从哪个页面中的超链接跳转至当前页面的;
%{User-Agent}i:请求报文中首部“User-Agent”的值;即发出请求的应用程序;
11、基于用户的访问控制
认证方式有两种:
basic:明文
digest:消息摘要认证
此处使用 basic认证。
# vim /etc/httpd/conf/httpd.conf
basic认证配置示例:
定义安全域
<Directory "">(定义哪个页面资源访问时需要认证)
Options None
AllowOverride None
AuthType Basic(认证类型)
AuthName "String“(认证提示符)
AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE"(认证时的账号密码所在的路径)
Require user username1 username2 ...(指明可登陆的用户;允许账号文件中的所有用户登录访问:Require valid-user)
</Directory>
创建账号密码文件AuthUserFile :
htpasswd [options] /PATH/TO/HTTPD_PASSWD_FILE username
-c:自动创建此处指定的文件,因此,仅应该在此文件不存在时使用;
-m:md5格式加密
-s: sha格式加密
-D:删除指定用户
e.g. htpasswd -c -m /etc/httpd/conf/.htpasswd tianxudong
注意:首次添加用户时使用-c,之后都不能使用,否则会覆盖里面原有的用户信息。
基于组账号进行认证;
# vim /etc/httpd/conf/httpd.conf
相比定义用户访问控制,多加一个组认证的文件。
AuthGroupFile "/PATH/TO/HTTPD_GROUP_FILE"
Require group grpname1 grpname2 ..
创建用户账号和组账号文件;
#vim /etc/httpd/conf/.htgroup
mygrp: tianxidong
组文件:每一行定义一个组
GRP_NAME: username1 username2 ...
12、虚拟主机
有三种实现方案:
基于ip:
为每个虚拟主机准备至少一个ip地址;
基于port:
为每个虚拟主机使用至少一个独立的port;
基于FQDN:
为每个虚拟主机使用至少一个FQDN;
注意:一般虚拟机不要与中心主机混用;因此,要使用虚拟主机,得先禁用‘main‘主机;
禁用方法:注释中心主机的DocumentRoot指令即可;
虚拟主机的配置方法:
<VirtualHost IP:PORT>(虚拟主机所监听的端口地址)
ServerName FQDN(若没有用name标示,则无需写FQDN)
DocumentRoot ""(虚拟主机的站点文件路径)
</VirtualHost>
其它可用指令:
ServerAlias:虚拟主机的别名;可多次使用;
ErrorLog:(此虚拟主机专用的错误日志)
CustomLog:(此虚拟主机专用的访问日志)
<Directory "">(基于路径对资源做访问控制)
...
</Directory>
Alias(路径别名)
...
e.g. 不同IP访问不同站点:
注释掉主配置文件的DocumentRoot
编译一个文件:
# vim /etc/httpd/conf.d/vhosts.conf
<VirtualHost 172.168.110.6:80>
ServiceName www.a.com
DocumentRoot "/www/a.com/htdocs"
</VirtualHost>
<VirtualHost 172.168.110.7:80>
ServiceName www.b.net
DocumentRoot "/www/b.net/htdocs"
</VirtualHost>
<VirtualHost 172.168.110.8:80>
ServiceName www.c.org
DocumentRoot "/www/c.org/htdocs"
</VirtualHost>
语法检查:httpd -t
重启服务:service httpd reload
e.g. 基于端口的虚拟主机:
首先添加3个端口:可参考上面的常用配置 1 。
语法检查:httpd -t
编译一个文件:
# vim /etc/httpd/conf.d/vhosts.conf
<VirtualHost 172.16.100.6:80>
ServerName www.a.com
DocumentRoot "/www/a.com/htdocs"
</VirtualHost>
<VirtualHost 172.16.100.6:808>
ServerName www.b.net
DocumentRoot "/www/b.net/htdocs"
</VirtualHost>
<VirtualHost 172.16.100.6:8080>
ServerName www.c.org
DocumentRoot "/www/c.org/htdocs"
</VirtualHost>
语法检查:httpd -t
重启服务:service httpd reload
e.g. 基于FQDN的虚拟主机:(端口一样、地址一眼样)
NameVirtualHost 172.16.100.6:80(基于FQDN的虚拟主机需要加一个专门的指令,Centos7不需要此指令)
<VirtualHost 172.16.100.6:80>
ServerName www.a.com
DocumentRoot "/www/a.com/htdocs"
</VirtualHost>
<VirtualHost 172.16.100.6:80>
ServerName www.b.net
DocumentRoot "/www/b.net/htdocs"
</VirtualHost>
<VirtualHost 172.16.100.6:80>
ServerName www.c.org
DocumentRoot "/www/c.org/htdocs"
</VirtualHost>
语法检查:httpd -t
重启服务:service httpd reload
13、status页面(查看运行中的进程详细情况,应加以访问认证)
LoadModule status_module modules/mod_status.so
编辑主配置文件,将以下几行启用。
<Location /server-status>
SetHandler server-status
Order allow,deny
Allow from 172.16(建议设置为只允许某台主机访问)
</Location>
14、使用mod_deflate模块压缩页面优化传输速度
适用场景:
(1) 节约带宽,额外消耗CPU;同时,可能有些较老浏览器不支持;
(2) 压缩适于压缩的资源,例如文件文件;
# vim /etc/httpd/conf/httpd.conf
语法检查:httpd -t
重启服务:service httpd reload