一:Apache 连接保持
[root@www ~]# vim /usr/local/httpd/conf/extra/httpd-default.conf
注意在httpd的主配置文件中将httpd-default.conf 的include前的注释符去掉
Apache通过设置配置文件httpd-default.conf中相关的连接保持参数来开启与控制连接保持功能。
Ø KeepAlive:决定是否打开连接保持功能,后面接 OFF 表示关闭,接 ON 表示打开,可以根据网站的并发请求量决定是否打开,即在高并发时打开连接保持功能,并发量不高时关闭此功能。
Ø MaxKeepAliveRequests:用于设置在一次长连接中可以传输的最大请求数量,超过此最大请求数量就会断开连接,最大值的设置决定于网站中网页的内容,一般设置数量会多于网站中所有的元素。
Ø KeepAliveTimeout:表示一次连接多次请求之间的最大间隔时间,即两次请求之间超过该时间连接就会自动断开,从而避免客户端占用连接资源。
修改KeepAliveTimeout的值,默认为5,可以修改为其他值,重启httpd后再客户端浏览器中查看开发者工具中的结果
二:Apache 的访问控制
2.1:客户机地址限制
限制策略的格式如下所示。
Ø Require all granted:允许所有主机访问;
Ø Require all denied:拒绝所有主机访问;
Ø Require local:仅允许本地主机访问;
Ø Require [not] host <主机名或域名列表>:允许或拒绝指定主机或域名访问;
Ø Require [not] ip <IP 地址或网段列表>:允许或拒绝指定 IP 地址网络访问。
1:允许从任何客户机访问
<Directory "/usr/local/httpd/htdocs">
Require all granted
</Directory>
2:若只希望 IP 地址为 173.17.17.2 的主机能够访问
<Directory "/usr/local/httpd/htdocs/wwwtest">
Require ip 173.17.17.2
</Directory>
3:只希望禁止
禁止来自两个内网网段 192.168.0.0/24 和 192.168.1.0/24 的主机访问,但允许其他任何主机访问
<Directory "/usr/local/httpd/htdocs/wwwroot">
<RequireAll>
Require all granted
Require not ip 192.168.0.0/24 192.168.1.0/24
</RequireAll>
</Directory>
2.2:用户授权限制
1:创建用户认证数据文件
[root@www ~]# cd /usr/local/httpd/
[root@www httpd]# bin/htpasswd -c /usr/local/httpd/conf/.awspwd webadmin
[root@www httpd]# cat /usr/local/httpd/conf/.awspwd
注意:
若省略“-c”选项,则表示指定的用户数据文件已经存在,用于添加新的用户或修改现有用户的密码
2:添加用户授权配置
[root@www ~]# vim /usr/local/httpd/conf/httpd.conf
<Directory "/usr/local/httpd/htdocs">
#Require all granted
AuthName "DocumentRoot"
AuthType Basic
AuthUserFile /usr/local/httpd/conf/.awspwd
Require valid-user
</Directory>
备注:
Ø AuthName:定义受保护的领域名称,该内容将在浏览器弹出的认证对话框中显示。
ØAuthType:设置认证的类型,Basic 表示基本认证。
Ø AuthUserFile:设置用于保存用户账号、密码的认证文件路径。
Ø require valid-user:要求只有认证文件中的合法用户才能访问。
[root@www ~]# systemctl restart httpd
3:验证用户访问授权
访问网站时,会提示输入账号和密码:
三:Apache 日志分割
1:Apache 自带 rotatelogs 分割工具
按日期分割
[root@www ~]# mkdir /var/log/httpd
[root@www ~]# vim /usr/local/httpd/conf/httpd.conf
ErrorLog "|/usr/local/bin/rotatelogs -l /var/log/httpd/error_%Y%m%d.log 86400"
CustomLog "|/usr/local/bin/rotatelogs -l /var/log/httpd/access_%Y%m%d.log 86400" combined
[root@www ~]# systemctl restart httpd
备注:
其中 ErrorLog 行是错误日志,
-l 表示使用本地时间代替 GMT (格林尼治时间)时间作为时间基准
CustomLog 行是定义访问日志格式,
86400 表示一天,即每天生成一个新的日志文件
combined:日志格式,组合日志格式
common:日志格式,通用日志格式
常见格式串:
%h是远程主机 192.168.10.3
%l是由identd确定的用户的身份 -
%u是HTTP身份验证确定的用户名 -
%t是服务器处理完请求的时间。 [19/Jul/2022:21:18:50 +0800]
%r是来自客户端的请求行(“GET/HTTP/1.0”)。 "GET / HTTP/1.1"
%> s是从服务器发送到客户端的状态代码(500,404等) 304
%b是客户端响应的大小(以字节为单位) -
%{Referer}i:请求报文中首部"referer" 的值;即从哪个页面中的超链接跳转至当前页面的,防止盗链,i就是首部的意思,Referer是链接到此URL的页面。
%{User-Agent}i:此项是客户端提供的浏览器识别信息,i是首部的意思,即请求头
%I:服务器接收得字节数,需要启用mod_logio模块。
%O:服务器发送得字节数,需要启用mod_logio模块。
备注:
- identd身份认证:identd 是一个服务器,它按照 RFC 1413 文档中指定的方式实现 TCP/IP 提议的标准 IDENT 用户身份识别协议
- HTTP身份验证:htpasswd生成账号密码后,使用的Basic类型的身份认证
combined格式示例
192.168.10.3 - - [19/Jul/2022:21:18:50 +0800] "GET / HTTP/1.1" 304 - "http://192.168.10.101/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"
common格式示例
192.168.10.3 - - [19/Jul/2022:21:19:45 +0800] "GET / HTTP/1.1" 304 -
通用格式和组合格式内容类似,组合格式多了两个请求头信息
第一个请求头示例:"http://www.baicai.link/" (\"%{Referer}i\") ##黄色部分,有时会显示一个横杠 "-"
"Referer"请求头。此项指明了该请求是被从哪个网页提交过来的,这个网页应该包含有/apache_pb.gif或者其连接。
第二个请求头示例:"Mozilla/4.08 [en] (Win98; I ;Nav)" (\"%{User-agent}i\") ##绿色部分
"User-Agent"请求头。此项是客户端提供的浏览器识别信息。
2:使用第三方工具 cronolog 分割
(1)编译安装 cronolog 工具
[root@www ~]# tar zxvf cronolog-1.6.2.tar.gz
[root@www ~]# cd cronolog-1.6.2
[root@www cronolog-1.6.2]# ./configure
[root@www cronolog-1.6.2]# make && make install
(2)设置 cronolog 工具分割 apache 日志
[root@www ~]# vim /usr/local/httpd/conf/httpd.conf
将之前的ErrorLog和CustomLog注释掉,添加新的日志分割参数:
ErrorLog "|/usr/local/sbin/cronolog /var/log/httpd/www.benet.com-error_%Y%m%d.log"
CustomLog "|/usr/local/sbin/cronolog /var/log/httpd/www.benet.com-access_%Y%m%d.log" combined
[root@www ~]# apachectl -t
[root@www ~]# apachectl restart
(2)访问网站并查看生成的日志文件
四:AWStats 日志分析
4.1:部署 AWStats 分析系统
1:安装 AWStats 软件包
[root@www ~]# tar zxf awstats-7.7.tar.gz
[root@www ~]# mv awstats-7.7 /usr/local/awstats
2:为要统计的站点建立配置文件
[root@www ~]# cd /usr/local/awstats/tools/
[root@www tools]# chmod +x awstats_configure.pl
[root@www tools]# ./awstats_configure.pl
(1)指定 httpd 主配置文件的路径
>/usr/local/httpd/conf/httpd.conf
(2)为指定 Web 站点创建配置文件
>www.benet.com
(3)日志文件存储路径
默认位置即可,直接回车
(4)后续配置工作
[root@www ~]# vim /usr/local/httpd/conf/httpd.conf
在文件末尾,会发现多了<Directory "/usr/local/awstats/wwwroot">模块,修改里面的内容,并在模块前面添加如下内容:
ErrorLog "logs/error_log"
CustomLog "logs/access_log" combined
<IfModule !mpm_prefork_module>
LoadModule cgid_module modules/mod_cgid.so
</IfModule>
<IfModule mpm_prefork_module>
LoadModule cgi_module modules/mod_cgi.so
</IfModule>
<Directory "/usr/local/awstats/wwwroot">
Options None
AllowOverride None
#Order allow,deny
#Allow from all
Require all granted
</Directory>
[root@www ~]# systemctl restart httpd
3:修改站点统计配置文件
[root@www ~]#vim /etc/awstats/awstats.www.benet.com.conf
LogFile="/usr/local/httpd/logs/access_log"
DirData="/var/lib/awstats"
[root@www ~]#mkdir /var/lib/awstats
4:执行日志分析,并设置 cron 计划任务
[root@www ~]# cd /usr/local/awstats/tools/
[root@www tools]# chmod +x awstats_updateall.pl
[root@www tools]#./awstats_updateall.pl now
[root@www ~]# crontab -e
*/5 * * * * /usr/local/awstats/tools/awstats_updateall.pl now
4.2:访问 AWStats 分析系统
1:访问站点 http://192.168.10.101/awstats/awstats.pl?config=www.benet.com
2:简化登录语句
[root@www ~]# vim /usr/local/httpd/htdocs/awb.html
<html>
<head>
<meta http-equiv=refresh content="0;
url=http://www.benet.com/awstats/awstats.pl?config=www.benet.com">
</head>
<body></body>
</html>
访问awstat时输入链接问 http://www.benet.com/awb.html
备注:
如果客户端不能解析benet.com的域名,就将上面红色部分的域名直接改为IP地址,访问时的网址就变成了:http://192.168.10.101/awb.html