欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

企业平台架构--Apache配置与应用(Apache的访问控制(KeepAlive),日志分割(rotatelogs和cronolog)实操,日志分析(AWStats)实操

程序员文章站 2022-06-25 21:45:44
...

前言

  • 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或者回车

企业平台架构--Apache配置与应用(Apache的访问控制(KeepAlive),日志分割(rotatelogs和cronolog)实操,日志分析(AWStats)实操

  • 修改主配置文件
[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

企业平台架构--Apache配置与应用(Apache的访问控制(KeepAlive),日志分割(rotatelogs和cronolog)实操,日志分析(AWStats)实操

  • 计划性任务更新数据
[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      更新数据

企业平台架构--Apache配置与应用(Apache的访问控制(KeepAlive),日志分割(rotatelogs和cronolog)实操,日志分析(AWStats)实操

  • 优化网页地址
[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 使用此地址直接访问
企业平台架构--Apache配置与应用(Apache的访问控制(KeepAlive),日志分割(rotatelogs和cronolog)实操,日志分析(AWStats)实操