Apache连接保持及访问控制
- HTTP 是属于应用层的面向对象协议,基于 TCP 协议之上的可靠传输。每次在进行HTTP 连接之前,需要先进行 TCP 连接,在 HTTP 连接结束后要对 TCP 连接进行终止,每个 TCP 连接都需要进行三次握手与四次断开,HTTP 协议不会对之前发生过的请求和响应进行管理,所以频繁地建立与关闭连接对于 HTTP 而言会消耗更多的内存与 CPU 资源。能不能允许通过同一个 TCP 连接发出多个请求,从而减少与多个连接相关的延迟,解决办法就是连接保持
- Apache通过设置配置文件httpd-default.conf中相关的连接保持参数来开启与控制连接保持功能
- KeepAlive:决定是否打开连接保持功能,后面接 OFF 表示关闭,接 ON 表示打开,可以根据网站的并发请求量决定是否打开,即在高并发时打开连接保持功能,并发量不高时关闭此功能
- KeepAliveTimeout:表示一次连接多次请求之间的最大间隔时间,即两次请求之间超过该时间连接就会自动断开,从而避免客户端占用连接资源
- MaxKeepAliveRequests:用于设置在一次长连接中可以传输的最大请求数量,超过此最大请求数量就会断开连接,最大值的设置决定于网站中网页的内容,一般设置数量会多于网站中所有的元素
客户机地址限制
- 在 httpd 服务主配置文件的、、、配置段中均可以使用 Require 配置项来控制客户端的访问
- 使用 Require 配置项时,需要设置客户端地址以构成完整的限制策略,地址形式可以是IP 地址、网络地址、主机名或域名
- 当 Require 配置项之后为"a"时,表示匹配任意地址
|---------------------|-------------------|
| Require all granted | 允许所有主机访问 |
| Require all denied | 拒绝所有主机访问 |
| Require local | 仅允许本地主机访问 |
| Require [not]host | 允许或拒绝指定主机或域名访问 |
| Require [not] ip | 允许或拒绝指定 IP 地址网络访问 |
//格式
<Directory "/usr/local/httpd/htdocs">
.. //省略部分内容
Require all granted
</Directory>
用户授权限制
- httpd 服务器支持使用摘要认证(Digest)和基本认证(Basic)两种方式
- 使用摘要认证需要在编译 httpd 之前添加"--enable-auth-digest"选项,但并不是所有的浏览器都支持摘要认证;而基本认证是 httpd 服务的基本功能,不需要预先配置特别的选项
- 基于用户的访问控制包含认证(Authentication)和授权(Authorization)两个过程
- 认证是指识别用户身份的过程,授权是指允许特定用户访问特定目录区域的过程
1:创建用户认证数据文件
htpd 的基本认证通过校验用户名、密码组合来判断是否允许用户访问。授权访问的用户账号需要事先建立,并保存在固定的数据文件中。使用专门的 htpasswd 工具程序,可以创建授权用户数据文件,并维护其中的用户账号
//使用 htpasswd 工具时,必须指定用户数据文件的位置,添加"-c"选项表示新建立此文件
[root@www ~]# cd /usr/local/httpd
[root@www httpd]# bin/htpasswd -c /usr/local/httpd/conf/.awspwd webadmin
New password: //根据提示设置密码
Re-type new password:
Adding password for user webadmin
[root@www httpd]# cat /usrlocal/httpd/conf/.awspwd //确认用户数据文件
webadmin:$apr1$L53Ws/2$3L4xhs4zZKDbJb.9p1fNg.
//若省略"-c"选项,则表示指定的用户数据文件已经存在,用于添加新的用户或修改现有用户的密码
[root@www httpd]# bin/htpasswd /usr/local/httpd/conf/.awspwd kcce
New password:
Re-type new password:
Adding password for user kcce
[root@www httpd]# cat /usr/local/httpd/conf.awspwd //确认用户数据文件
webadmin:$apr1$L53Ws/2$3L4xhs4zZKDbJb.9p1fNg.
kcce:$apr1$OJIFi4TA$FaVYZnH2KH5KCOSHJHAWD0
2:添加用户授权配置
有了授权用户账号以后,还需要修改 httpd.conf配置文件,在特定的目录区域中添加授权配置,以启用基本认证并设置允许哪些用户访问
[root@www ~# vim /usr/local/httpd/conf/httpd.conf
<Directory "/usr/local/httpd/htdocs">
AuthName "DocumentRoot"
AuthType Basic
AuthUserFile /usr/local/httpd/conf/.awspwd
Require valid-user
</Directory>
[root@www ~]# systemctl restart httpd //重启服务使配置生效
- AuthName:定义受保护的领域名称,该内容将在浏览器弹出的认证对话框中显示
- AuthType:设置认证的类型,Basic表示基本认证
- AuthUserFile:设置用于保存用户账号、密码的认证文件路径
- require valid-user:要求只有认证文件中的合法用户才能访问。其中,valid-user 表示所有合法用户,若只授权给单个用户,可改为指定的用户名(如webadmin)
Apache日志分割
- 随着网站的访问量越来越大,默认情况下 Apache 服务器产生的单个日志文件也会越来越大,如果不对日志进行分割,那么如果日志文件占用磁盘空间很大的话势必会将整个日志文件删除,这样也丢失了很多对网站比较宝贵的信息
- 如果服务器遇到故障时,运维人员要打开日志文件进行分析,打开的过程会消耗很长时间,也势必会增加处理故障的时间
1:Apache自带rotatelogs分割工具
将 Apache 主配置文件 httpd.conf打开,配置网站的日志文件转交给 rotatelogs分割处理
[root@www ~]# mkdir /var/log/httpd/
[root@www ~]# vim /usr/local/httpd/conf/httpd.conf
ErrorLog "/usr/local/bin/rotatelogs - /var/log/httpd/error %Y%m%d.log 86400"
CustomLog "/usr/local/bin/rotatelogs - /arlog/httpd/access %Y%m%d.log 86400"combined
//其中 ErrorLog 行是错误日志,-表示使用本地时间代替 GMT 时间作为时间基准,需要注意的是在一个改变 GMT 偏移量(比如夏令时)的环境中使用-1会导致不可预料的结果
//CustomLog 行是定义访问日志格式,86400表示一天,即每天生成一个新的日志文件
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 "/usr/local/sbin/cronolog /varlog/httpd/www.kgc.com-error %Y%m%d.log"
CustomLog "/usr/local/sbin/cronolog/var/log/httpd/www.kgc.com-access %Y%m%d.log" combined
[root@www ~]# systemctl restart httpd
[root@www ~]#ll /var/log/httpd/|grep"www.kgc.com"
-rw-r--r-- 1 root root 1501月11 20:45 www.kgc.com-access 20200101.10g
-rw-r--r-- 1 root root 588 1月 11 20:45 ww.kgc.com-error 20200101.10g
部署AWStats日志分析
- 在 httpd 服务器的访问日志文件 access log 中,记录了大量的客户机访问信息,通过分析这些信息,可以及时了解 Web 站点的访问情况,如每天或特定时间段的访问 IP 数量,点击量最大的页面等
- AWStats 是使用 Per语言开发的一款开源日志分析系统,它不仅可用来分析Apache 网站服务器的访问日志,也可以用来分析 Samba、Vsftpd、llS 等服务的日志信息。结合 crond等计划任务服务,可以对不断增长的日志内容定期进行分析
1:安装AWStats软件包
[root@www ~]# tar zxf awstats-7.7.tar.gz
[root@www ~]# mv awstats-7.7 /usr/local/awstats //移动awstats文件
2:为要统计的站点建立配置文件
AWStats 系统支持统计多个网站的日志文件,通常以网站名称来区分不同的站点。因此,在执行日志文件分析之前,需要为每个Web 站点建立站点统计配置文件,借助于AWStats 系统提供的 awstats confiqure.pl 脚本可以简化创建过程
//首先切换到 awstats/tools 目录下,并执行其中的 awstats configure.pl 脚本
[root@www ~l# cd /usr/locallawstats/tools/
[root@www tools]# chmod +x awstats configure.pl
[root@www tools]# ./awstats configure.pl
//将会进入一个交互式的配置过程,将会检査 awstats 的安装目录、httpd 服务的配置文件路径等系统环境,并提示用户指定站点名称、设置配置文件路径
//指定 httpd 主配置文件的路径
//配置脚本将查找并识别 htpd 服务的主配置文件,以便自动添加相关配置内容。如果未能在常见的安装路径中找到相关配置内容,则用户需要根据提示进行手工指定
...
>/usr/local/httpd/conf/httpd.conf //输入 httpd.conf 配置文件的路径
//为指定 Web 站点创建配置文件
//根据提示继续选择"y"以创建站点配置文件,并指定要统计的目标网站名称、站点配置文件的存放位置(默认为/etc/awstats)
...
>www.kgc.com //指定要统计的目标网站名称
//到最后的网址: http://localhost/awstats/awstats.pl?config=www.kgc.com 复制一下
//后续配置工作接下来将会尝试重启 htpd 服务(支持使用/sbin/service httpd restart 或/bin/systemctl restarthttpd.servic 命令重启,需要有相关脚本,否则手动重启 apache 服务)
[root@www ~]# vim /usr/local/httpd/conf/httpd.conf
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
//根据上述设置过程,为网站 www.kgc.com 新建立的站点统计配置文件将存放到/etc/awstats 目录下,文件名称为 awstats.www.kgc.com.conf
//若还需要统计其他 Web 站点的日志,可以执行 awstats_configure.pl 脚本创建新的配置文件
//可以使用http://localhost/awstats/awstats.pl?config=www.kgc.com 地址访问日志分析页面
3:修改站点统计配置文件
为站点 www.kgc.com 建立好配置文件以后,还需要对其做进一步的修改。修改的内容主要包括指定要分析的 Web 日志文件和指定用来存放统计数据的目录
[root@www ~]#vim /etc/awstats/awstats.www.kgc.com.conf
LogFile="/usr/local/httpd/logs/access log"
DirData="/var/lib/awstats"
......//省略部分内容
[root@www ~]#mkdir /var/lib/awstats
//其中,LogFile 用来指定日志路径,应设置Web 日志文件的实际位置;DirData 用来指定数据目录,可以采用默认值,但需要创建指定的目录(var/lib/awstats)
4:执行日志分析,并设置cron 计划任务
使用 AWStats 提供的 awstats updateall.pl 脚本,可以更新所有站点(根据站点配置文件)的日志统计数据。执行该脚本时,系统将会自动分析新增的日志内容,并将分析结果更新到统计数据库中
//由于 Web 日志文件的内容是在不断更新的,为了及时反馈网站访问情况,日志分析工作也需要定期、自动地执行。通过 crond 服务可设置计划任务,一般建议每五分钟执行一次日志分析任务
[root@www ~]# crontab -e
*/5****/usr/local/awstats/tools/awstats updateall.pl now
访问AWStats分析系统
-
访问站点 http://192.168.10.101/awstats/awstats.pl?config=www.kgc.com 后,即可看到AWStats 日志分析系统的统计页面,该页面分别按访问时间、用户来源、所用浏览器等类别列出各种详细的网站访问情况,若此处访问出现 403 Forbidden 错误,关闭 selinux 即可正常访问
-
在访问 AWStats 系统时,需要指定 awstats 日录、脚本位置、统计目标等信息,这样既不便于记忆,输入时也比较麻烦。为了简化操作,可以在 Web 根目录下建立一个自动跳转的 HTML 网页。例如,执行以下操作后,用户只要访问 htp:/www.kgc.com/awb.html即可自动跳转到 www.kgc.com 站点的 AWStats 日志分析页面
[root@www ~]# vim /var/www/html/awb.html
<html> <head> <meta http-equiv=refresh content="0;url=http://www.kgc.com/awstats/awstats.pl?config=www.kgc.com"> </head> <body></body> </html>