企业平台架构--Apache配置与应用(Apache的访问控制(KeepAlive),日志分割(rotatelogs和cronolog)实操,日志分析(AWStats)实操
程序员文章站
2022-06-25 21:45:44
...
企业平台架构--Apache配置与应用(Apache的访问控制(KeepAlive),日志分割(rotatelogs和cronolog)实操,日志分析(AWStats)实操
前言
- Apache HTTP Server 之所以受到众多企业的青睐,得益于其代码开源,跨平台,功能模块化,可灵活定制等诸多优点,其不仅性能稳定,在安全性方面的表现也十分出色
一:Apache配置详解
1.1:Apache连接保持
1.1.1:为什么要保持连接
- HTTP协议是基于TCP协议之上的,在进行HTTP连接之前,要先进行TCP连接,每个TCP连接都要进行三次握手与四次挥手。建立与关闭连接对于HTTP协议而言会消耗很多的内存与CPU资源。
- 解决办法是HTTP连接保持。就是尽量地保持客户端的连接,通过一个TCP连接传送多个HTTP请求响应,对于客户端可以提高50%以上的响应时间,对于服务器可以降低建立与关闭连接时的资源消耗。
1.1.2:保持连接的方式
-
Apache连接保持相关参数
-
KeepAlive
- 是否打开连接保持,OFF关闭,ON打开
-
KeepAliveTimeout
- 一次连接多次请求之间的最大间隔时间,两次请求超过该时间连接断开
-
MaxKeepAliveRequests
- 一次连接能够传输的最大请求数量
1.2:Apache访问控制
1.2.1:Apache访问控制概述
- 作用
- 控制对网站资源的访问
- 为特定的网站目录添加访问授权
- 常用访问控制方式
- 客户机地址限制
- 用户授权限制
1.2.2:基于客户端地址的访问控制
- 使用Require配置项实现访问控制,按先后顺序限制
- 可用、、、配置段中
- Require配置项的常见语法
Require all granted
Require all denied
Require local
Require [not] host <主机名或域名列表>
Require [not] ip <IP地址或网段列表>
'使用not禁止访问时要将其置于<RequireAll></RequireAll>容器中,并在容器中指定相对应的限制策略'
- 实验举例
[aaa@qq.com ~]# cd /etc/httpd/conf
[aaa@qq.com conf]# ls
httpd.conf magic
[aaa@qq.com conf]# mkdir extra
[aaa@qq.com conf]# cd extra
[aaa@qq.com extra]# vim vhost.conf
<VirtualHost 20.0.0.47:80>
DocumentRoot "/var/www/html/kevin"
Errorlog "logs/www.kevin.com.error_log"
CustomLog "logs/www.kevin.com.access_log" common
<Directory> "/var/www/html">
<RequireAll>
Require not ip 20.0.0.50 '表示不允许ip20.0.0.50访问'
Require all granted
</RequireAll>
</Directory>
</VirtualHost>
1.2.3:用户授权限制–创建用户认证数据库
- 创建用户认证数据库
命令基本格式
'htpasswd命令是httpd自带的'
htpasswd -c /etc/httpd/conf/abc webadmin '为用户webadmin创建密码文件'
New password: '输入密码'
Re-type new password: '重复输入密码'
cat /etc/httpd/conf/abc
webadmin:加密密码
- 实验举例
[aaa@qq.com abc]# htpasswd -c /etc/httpd/conf/aaa ddd
New password:
Re-type new password:
Adding password for user ddd
[aaa@qq.com abc]# cat /etc/httpd/conf/aaa
ddd:$apr1$zwIklPGy$ZINaIkXsSq36oIk2lAiiJ1
'添加第二个用户'
[aaa@qq.com abc]# htpasswd /etc/httpd/conf/aaa bbb
New password:
Re-type new password:
Adding password for user bbb
[aaa@qq.com abc]# cat /etc/httpd/conf/aaa
ddd:$apr1$zwIklPGy$ZINaIkXsSq36oIk2lAiiJ1
bbb:$apr1$q7OdS8z1$ELGg2a1AhHP.QfXJXfQTQ1
1.2.4:用户授权限制–添加用户授权配置
'配置基本格式'
<Directory "/var/www/html">
AuthName "DocumentRoot" '受保护的领域名称'
AuthType Basic '认证类型'
AuthUserFile /etc/httpd/conf/qwe '用户认证账号文件'
Require valid-user '要求通过认证才能访问'
</Directory>
- 实验举例
[aaa@qq.com extra]# vim vhost.conf
<VirtualHost 20.0.0.48:80>
DocumentRoot "/var/www/html/kevin01"
Errorlog "logs/www.kevin01.com.error_log"
CustomLog "logs/www.kevin01.com.access_log" common
<Directory> "/var/www/html">
AuthName "DocumentRoot"
AuthType basic
AuthUserFile /etc/http/conf/pwd
Require valid-user
</Directory>
</VirtualHost>
二:Apache日志管理
2.1:日志分割
- 随着网站的访问量增大,默认情况下Apache的单个日志文件也会越来越大
- 日志文件占用磁盘空间很大
- 查看相关信息不方便
- 对日志文件进行分割
- Apache自带rotatelogs分割工具实现
- 第三方工具cronolog分割
2.2:rotatelogs分割工具
- 配置网站的日志文件转交给rotatelogs分割处理
- 配置格式为
ErrorLog "| rotatelogs 命令的绝对路径 -l 日志文件路径/网站名-error_%Y%m%d.log 86400" '//which rotatelogs命令查看绝对路径,%Y%m%d表示年月日,86400表示一天的秒数'
CustomLog "| rotatelogs 命令的绝对路径 -l 日志文件路径/网站名-access_%Y%m%d.log 86400" combined
例如
[aaa@qq.com logs]vim /etc/httpd/conf/httpd.conf
ErrorLog "| /usr/sbin/rotatelogs -l logs/error_%Y%m%d.log 86400"
CustomLog "| /usr/sbin/rotatelogs -l logs/access_%Y%m%d.log 86400" combined
实际生产环境中,一个服务器绝大多数对应N个子域名站点,为了方便统一管理,可以用虚拟主机的方式进行配置,并用网站名标识日志文件
2.2.1:日志文件的产生
- 服务安装后,不会生成日志文件不会产生
- 服务启动后,生成日志文件
- 访问服务后,日志文件会生成内容
2.2.2:实验配置
[aaa@qq.com ~]# iptables -F
[aaa@qq.com ~]# setenforce 0
[aaa@qq.com ~]# yum install httpd -y
[aaa@qq.com ~]# which rotatelogs
/usr/sbin/rotatelogs
[aaa@qq.com ~]# vim /etc/httpd/conf/httpd.conf
ServerName www.kevin.com:80 '修改域名'
Listen 20.0.0.47:80 '修改监听端口'
#Listen 80 '关闭ipv6监听端口'
[aaa@qq.com ~]# systemctl start httpd.service
[aaa@qq.com ~]# netstat -ntap | grep 80 '查看80端口'
tcp 0 0 20.0.0.47:80 0.0.0.0:* LISTEN 11645/httpd
[aaa@qq.com ~]# ls /var/log/httpd/
access_log error_log
[aaa@qq.com ~]# vim /etc/httpd/conf/httpd.conf
'搜索ErrorLog,修改为以下内容'
ErrorLog "| /usr/sbin/rotatelogs -l logs/www.kevin.com.error_%Y%m%d.log 86400"
'搜索CustomLog,修改为以下内容'
CustomLog "| /usr/sbin/rotatelogs -l logs/www.kevin.com.access_%Y%m%d.log 86400" common
[aaa@qq.com ~]# systemctl restart httpd.service
[aaa@qq.com ~]# httpd -t
Syntax OK
[aaa@qq.com ~]# ls /var/log/httpd/
[aaa@qq.com ~]# date -s 09/05/20
2020年 09月 05日 星期六 00:00:00 CST
[aaa@qq.com ~]# ls /var/log/httpd/
access_log www.kevin.com.access_20200805.log www.kevin.com.error_20200805.log
error_log www.kevin.com.access_20200905.log www.kevin.com.error_20200905.log
2.3:cronolog分割工具
- 基于上一个实验配置
[aaa@qq.com ~]#cd /opt
cronolog-1.6.2-14.el7.x86_64.rpm '安装cronolog工具'
[aaa@qq.com ~]#rpm -ivh cronolog-1.6.2-14.el7.x86_64.rpm '解压缩工具包'
[aaa@qq.com ~]# vim /etc/httpd/conf/httpd.conf
ErrorLog "| /usr/sbin/cronolog logs/www.kevin.com.error_%Y%m%d.log"
CustomLog "| /usr/sbin/cronolog logs/www.kevin.com.access_%Y%m%d.log" combined
[aaa@qq.com opt]# systemctl restart httpd
2.4:AWStats日志分析
2.4.1:AWStats概述
- perl语言(骆驼语言)开发的一款开源日志分析系统
- 可用来分析Apache,Samba,vsftpd,IIS等服务器的访问日志
- 信息结合crond等计划任务服务,可对日志内容定期进行分析
2.4.2:部署AWStats环境准备
-
实验环境
VMware软件
一台centos7虚拟机
一台Windows虚拟机
-
环境准备
WindowsDNS解析地址指向centos7
centos7安装bind和httpd
2.4.3:部署AWStats过程
- 配置dns服务
[aaa@qq.com opt]# yum install httpd bind -y
[aaa@qq.com opt]# vim /etc/named.conf
options {
listen-on port 53 { any; }; '修改成any'
...省略内容
allow-query { any; }; '修改成any'
[aaa@qq.com opt]# vim /etc/named.rfc1912.zones
zone "kevin.com" IN {
type master;
file "kevin.com.zone";
allow-update { none; };
};
[aaa@qq.com ~]# cd /var/named/
[aaa@qq.com named]# cp -p named.localhost kevin.com.zone
[aaa@qq.com named]# vim kevin.com.zone
www IN A 20.0.0.47
- 配置httpd
[aaa@qq.com named]# vim /etc/httpd/conf/httpd.conf
ServerName www.kevin.com:80
Listen 20.0.0.47:80
#Listen 80
- 修改网页信息
[aaa@qq.com named]# cd /var/www/html/
[aaa@qq.com html]# vim index.html
<h1>this is test</h1>
[aaa@qq.com html]# systemctl restart named
[aaa@qq.com html]# systemctl restart httpd
[aaa@qq.com html]# iptables -F
[aaa@qq.com html]# setenforce 0
- 安装AWStats
awstats-7.6.tar.gz
[aaa@qq.com html]# mv awstats-7.6.tar.gz /opt
[aaa@qq.com html]# cd /opt/
[aaa@qq.com opt]# tar zxvf awstats-7.6.tar.gz
[aaa@qq.com opt]# mv awstats-7.6 /usr/local/awstats
[aaa@qq.com opt]# cd /usr/local/
[aaa@qq.com local]# cd awstats/tools/
[aaa@qq.com tools]# ./awstats_configure.pl
Config file path ('none' to skip web server setup):
> /etc/httpd/conf/httpd.conf //输入配置文件
> Your web site, virtual server or profile name:
> www.benet.com
> //输入域名
> 其他全部是y或者回车
- 修改主配置文件
[aaa@qq.com tools]# vim /etc/httpd/conf/httpd.conf
<Directory "/usr/local/awstats/wwwroot">
Options None
AllowOverride None
# Order allow,deny '注释掉'
# Allow from all gt'注释掉'
Require all granted '添加这行内容'
</Directory>
[aaa@qq.com tools]# cd /etc/awstats/
[aaa@qq.com awstats]# ls
awstats.www.kevin.com.conf
[aaa@qq.com awstats]# vim awstats.www.kevin.com.conf
LogFile= "/var/log/httpd/access log"
//修改访问日志文件位置
DirData=' "/var/lib/awstats"
//awstats默认不存在(需要创建)
[aaa@qq.com awstats]# cd /var/lib/
[aaa@qq.com lib]# mkdir awstats
service httpd restart
- 计划性任务更新数据
[aaa@qq.com tools]# crontab -e
*/5 * * * * /usr/local/awstats/tools/awstats_updateall.pl now
- 更新数据
http://20.0.0.51/awstats/awstats.pl?config=www.kevin.com
[aaa@qq.com named]# cd /usr/local/awstats/tools
[aaa@qq.com tools]# ./awstats_updateall.pl now 更新数据
- 优化网页地址
[aaa@qq.com tools]# cd /var/www/html
[aaa@qq.com html]# vim aws.html
<html>
<head>
<meta http-equiv=refresh content= "0;url= http://www.kevin.com/awstats/awstats.pl?config=www.kevin.com">
</head>
<body> </body>
</html>
http://www.kevin.com/aws.html 使用此地址直接访问