Apache功能配置:访问控制、日志分割; 部署AWStats日志分析工具

目录

保持连接

访问控制

只允许指定ip访问

拒绝指定主机其他正常访问

用户授权

日志格式

日志分割

操作步骤

使用第三方工具cronolog分割日志

AWStats日志分析

操作步骤

访问AwStats分析系统


保持连接

Apache通过设置配置文件httpd-default.conf中相关的连接保持参数来开启与控制连接保持功能。

使用vim /usr/local/httpd/conf/extra/httpd-default.conf命令打开apache的默认配置文件

注意在httpd的主配置文件中将httpd-default.conf 的in clude前的注释符去掉,让主配置文件包含该配置文件

|----------------------|-----------------------------------------------------------------------------|
| 参数 | 说明 |
| KeepAlive | 保持连接功能,OFF表示关闭,ON表示打开,可以根据网站的并发请求量决定是否打开,即在高并发时打开连接保持功能,并发量不高时关闭此功能。 |
| MaxKeepAliveRequests | 用于设置在一次长连接中可以传输的最大请求数量,超过此最大请求数量就会断开连接,最大值的设置决定于网站中网页的内容,一般设置数量会多于网站中所有的元素。 |
| KeepAliveTimeout | 表示一次连接多次请求之间的最大间隔时间,即两次请求之间超过该时间连接就会自动断开,从而避免客户端占用连接资源。 |

开启httpd服务后,在访问http服务时,在网页中按下F12,打开开发人员工具,在选中网络窗口,使用Ctrl + R刷新网页

选中主机ip,可以看到标头下的响应标头的信息,显示Keep-Alive已经开启,相关参数是timeout=5, max=97

现在来到默认配置文件(/usr/local/httpd/conf/extra/httpd-default.conf)中修改超时时间和最大连接数

保存并退出,使用systemctl restart httpd重启服务

此时来到浏览器刷新,可以看到最大连接数为90


访问控制

使用vim /usr/local/httpd/conf/httpd.conf命令进入httpd主配置文件

在末行模式下搜索Directory(:/Directory)可以找到单元,这个单元就规定了允许或拒绝用户访问哪些目录(访问权限)

bash 复制代码
<Directory "/usr/local/httpd/htdocs">
    # 省略注释
    Options Indexes FollowSymLinks
    AllowOverride None
    Require ip 192.168.10.102 # 修改为ip地址
#   Require ip 192.168.10.0/24 规定为网段也可以
</Directory>

图中的Require all denied规定了用户全都不能访问系统的根目录

往下翻一点,可以看到另一个Directory单元,这个单元中就规定了用户可以访问/usr/local/httpd/htdocs目录

只允许指定ip访问

bash 复制代码
<Directory "/usr/local/httpd/htdocs">
    # 省略注释
    Options Indexes FollowSymLinks
    AllowOverride None
    Require ip 192.168.10.102 # 修改为ip地址
#   Require ip 192.168.10.0/24 规定为网段也可以
</Directory>

修改后需要重启服务

然后打开一台带有图形化界面的虚拟机,比如win10或win11,或者使用第二台Linux主机,通过curl命令也可以

将其ip修改为192.168.10.102,访问Web服务器(192.168.10.101),可以看到访问是通过的

使用宿主机访问也不能正常访问了,403状态码

拒绝指定主机其他正常访问

bash 复制代码
<Directory "/usr/local/httpd/htdocs">
    # 省略注释
    Options Indexes FollowSymLinks
    AllowOverride None
    <RequireAll>
        Require all granted    # 允许所有主机访问
        Require not ip 192.168.10.102    # 拒绝192.168.10.102访问
    </RequireAll>
</Directory>

此时除了刚刚开启的102主机其他的都可以正常访问Web服务器

用户授权

验证授权的方式变成账号密码,需要用到Apache自带的htpasswd工具生成

使用htpasswd命令生成文件,第一次创建需要加-c选项,后续就不需要加-c了

通过cat命令可以查看到生存的用户和密钥

bash 复制代码
[root@localhost ~]# cat /usr/local/httpd/conf/.example 
tom:$apr1$9E2tS/4/$28pw.i5heCsVXYY9TA7Og/
jerry:$apr1$dQtbTAQw$w3QYXr8E62MzoYnNbUEiC1

再修改配置文件(/usr/local/httpd/conf/httpd.conf)

bash 复制代码
<Directory "/usr/local/httpd/htdocs">
    # 省略注释
    Options Indexes FollowSymLinks
    AllowOverride None
    
    AuthName "abc" # 指定授权域的名称或描述
    AuthType Basic # 指定了认证的类型为 Basic,即基本认证方式。
    AuthUserFile /usr/local/httpd/conf/.example # 指定了存储用户账号和密码的文件的路径
    Require valid-user # 要求访问受保护资源的用户必须提供有效的用户名和密码。
</Directory>

Basic:指定了认证的类型为 Basic,即基本认证方式。Basic Authentication 是一种简单的认证方式,客户端(通常是浏览器)会将用户名和密码以明文形式通过 HTTP 的 Authorization 头部发送给服务器。

最后在访问Web服务器时,就会被要求输入账号和密码


日志格式

打开Apache的主配置文件(/usr/local/httpd/conf/httpd.conf),在末行模式下搜索Log(:/Log)

可以看到httpd提供的两种日志格式,第一种是combined(组合格式),第二种是common(通用格式)

在下方可以看到access_log(访问日志)用的是通用格式来生成日志的,这里我们改成组合格式

改为组合模式

保存并退出,重启httpd服务,再次访问Web服务器。然后cat查看/usr/local/httpd/logs/access_log文件

可以看到最后一行的组合日志格式生成的日志

bash 复制代码
192.168.10.1 - - [10/Jul/2024:10:19:23 +0800] "GET / HTTP/1.1" 200 154 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0"

|----------------------|-----------------------------------------------------------------------------------------|
| 参数 | 说明 |
| &h | 客户端的IP地址或主机名 |
| %l | 客户端的标识符,如果启用了标识符(如通过 IdentLookups 配置),否则为 - |
| %u | 请求时客户端提供的用户名(如果是用户认证登录,就显示为用户),否则显示 - |
| %t | 请求的时间戳 |
| \"%r\" | 客户端请求的第一行,包括 HTTP 方法、请求路径和协议 这里的 \ 是转义符 |
| %>s | 服务器返回给客户端的HTTP状态码 |
| %b | 传输给客户端的字节数,不包括HTTP头部的大小 |
| \"%{Referer}i\" | 请求报文中首部 "referer" 的值;即从哪个页面中的超链接跳转至当前页面的,防止盗链,i就是首部的意思,Referer是链接到此URL的页面。 i是首部的意思,即请求头 |
| \"%{User-Agent}i\" | 此项是客户端提供的浏览器识别信息,i是首部的意思,即请求头 |
| &I | 服务器接收得字节数,需要启用mod_logio模块。 |
| %O | 服务器发送得字节数,需要启用mod_logio模块。 |


日志分割

日志分割需要使用Apache自带的日志分割工具rotatelogs

操作步骤

依旧打开httpd主配置文件

将刚才修改日志格式的行注释掉,使用CustomLog指定日志记录的方式

bash 复制代码
#CustomLog "logs/access_log" combined
CustomLog "|/usr/local/bin/rotatelogs -l /var/log/httpd/access_%Y%m%d.log 86400" combined

|-------------------------------------|-----------------------------------------------|
| 参数 | 说明 |
| | | 将生成的日志数据传递给一个外部程序进行处理或存储 |
| /usr/local/bin/rotatelogs | 指定日志分割工具的路径 |
| -l /var/log/httpd/access_%Y%m%d.log | 指定了日志文件的格式和存储位置 -l:用于指定日志文件的命名模式和路径 |
| %Y%m%d | 表示将日期格式化为年(四位数)、月、日,例如 access_20240710.log |
| 86400 | 日志文件的滚动时间间隔,单位是秒。这里代表一天的秒数,即每隔一天就会生成一个新的日志文件。 |

保存并退出,重启服务。手动在指定的/var/log下创建httpd目录

再通过浏览器访问Web服务器,然后去/var/log/httpd/下查看access_20240710.log文件

bash 复制代码
[root@localhost httpd]# cat access_20240710.log 
192.168.10.1 - - [10/Jul/2024:10:40:07 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0"
192.168.10.1 - - [10/Jul/2024:10:40:07 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0"
192.168.10.1 - - [10/Jul/2024:10:40:08 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0"

使用第三方工具cronolog分割日志

将源代码软件包拖入XShell,使用tar zxvf命令解压,进入解压目录

使用 ./configure,make && make instll 安装

进入/usr/local/sbin/目录下可以看到自动将命令安装进sbin目录下了

bash 复制代码
[root@localhost cronolog-1.6.2]# cd /usr/local/sbin/
[root@localhost sbin]# ls
cronolog  cronosplit

进入httpd主配置文件,修改日志记录方式

bash 复制代码
#CustomLog "logs/access_log" combined
CustomLog "|/usr/local/sbin/cronolog /var/log/httpd/my_access_%Y%m%d.log" combined

保存并退出,重启服务。

再通过浏览器访问Web服务器,然后去/var/log/httpd/下查看my_access_20240710.log文件

bash 复制代码
[root@localhost httpd]# cat my_access_20240710.log 
192.168.10.1 - - [10/Jul/2024:10:48:30 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0"

实验完成后把日志记录方式改为原来的,用于下一步日志分析的实验

bash 复制代码
CustomLog "logs/access_log" combined
#CustomLog "|/usr/local/sbin/cronolog /var/log/httpd/my_access_%Y%m%d.log" combined

AWStats日志分析

Awstats是一个免费非常简洁而且强大有个性的网站日志分析工具。

操作步骤

将源代码软件包拖入XShell,使用tar zxvf命令解压,然后使用mv awstats-7.7 /usr/local/awstats命令将解压出的目录移动到/usr/local/下并将目录名重命名为awstats

cd到/usr/local/awstats目录下,再进入tools子目录,可以看到这里存放着工具集

bash 复制代码
[root@localhost ~]# cd /usr/local/awstats/
[root@localhost awstats]# ls
docs  README.md  tools  wwwroot
[root@localhost awstats]# cd tools/
[root@localhost tools]# ls
awstats_buildstaticpages.pl  dolibarr            maillogconvert.pl   xslt
awstats_configure.pl         geoip_generator.pl  nginx
awstats_exportlib.pl         httpd_conf          urlaliasbuilder.pl
awstats_updateall.pl         logresolvemerge.pl  webmin

在该目录下使用awstats_configure.pl初始化

bash 复制代码
[root@localhost tools]# ./awstats_configure.pl

Enter full config file path of your Web server.
Example: /etc/httpd/httpd.conf    # 使用yum安装的位置
Example: /usr/local/apache2/conf/httpd.conf    # 使用源代码可能安装的位置
Example: c:\Program files\apache group\apache\conf\httpd.conf    # Windows系统下可能安装apache的安装路径
Config file path ('none' to skip web server setup):
> /usr/local/httpd/conf/httpd.conf    # 填入Apache的配置文件路径,回车

-----> Need to create a new config file ?    # 是否需要创建一个新的配置文件
Do you want me to build a new AWStats config/profile    # 是否希望它创建一个新的AWStats配置文件或配置文件模板
file (required if first install) [y/N] ? y

-----> Define config file name to create    # 要求定义要创建的配置文件的名称
What is the name of your web site or profile analysis ?
Example: www.mysite.com
Example: demo
Your web site, virtual server or profile name:
> www.tom.com      # 输入想命名的AWStats配置文件的名称

-----> Define config file path    # 设置配置文件的路径
In which directory do you plan to store your config file(s) ?
Default: /etc/awstats
Directory path to store config file(s) (Enter for default):
> 
    # 这里使用默认路径 所以直接回车

Press ENTER to continue...
# 回车,以继续
Press ENTER to finish...
# 回车,以结束

修改httpd配置文件,在命令模式下按下大写字母G,来到文件末尾,修改<Directory>标签为允许全部客户端访问该目录下的文件和脚本

bash 复制代码
[root@localhost ~]# vim /usr/local/httpd/conf/httpd.conf
<Directory "/usr/local/awstats/wwwroot">
    Options None
    AllowOverride None
    Require all granted
</Directory>

编辑awstats初始化后生成的配置文件,然后创建存储AWStats数据的目录

bash 复制代码
[root@localhost tools]# vim /etc/awstats/awstats.www.tom.com.conf
在第50行,改为httpd路径位置
Logile="/usr/local/httpd/logs/access_log"
在第220行,改为如下内容
DirData="/var/lib/awstats"    # 指定了AWStats存储数据文件的目录路径
[root@localhost awstats]# mkdir /var/lib/awstats

编辑当前用户的 cron 任务

bash 复制代码
[root@localhost tools]# crontab -e
*/2 * * * * /usr/local/awstats/tools/awstats_updateall.pl now

*/2:表示每隔2分钟执行一次后面的命令
*:通配符,表示所有可能的值
/usr/local/awstats/tools/awstats_updateall.pl now:是要执行的命令或者脚本

再修改httpd配置文件,在命令模式下按下大写G来到文件末尾,在文件末尾添加IfModule标签加载不同模块,最后重启服务

bash 复制代码
[root@localhost ~]# vim /usr/local/httpd/conf/httpd.conf
<IfModule !mpm_prefork_module>
    LoadModule cgid_module modules/mod_cgid.so
</IfModule>
<IfModule mpm_prefork_module>
    LoadModule cgi_module modules/mod_cgi.so
</IfModule>

重启服务
[root@localhost tools]# systemctl restart httpd

访问AwStats分析系统

在浏览器访问站点:http://192.168.10.101/awstats/awstats.pl?config=www.tom.com

相关推荐
没有黑科技28 分钟前
5G网络中频段的分配
网络·5g
余厌厌厌39 分钟前
go语言学习 第9章:映射(Map)
服务器·学习·golang
搬码临时工1 小时前
如何通过外网访问内网?哪个方案比较好用?跨网远程连接网络知识早知道
网络·智能路由器
waving-black1 小时前
利用frp和腾讯云服务器将内网暴露至外网(内网穿透)
linux·服务器·腾讯云·frp·内网穿透
stormsha1 小时前
Linux中su与sudo命令的区别:权限管理的关键差异解析
linux·运维·服务器·鸿蒙系统·ux·batch命令
新加坡内哥谈技术2 小时前
Meta计划借助AI实现广告创作全自动化
运维·人工智能·自动化
snetlogon202 小时前
JDK17 Http Request 异步处理 源码刨析
android·网络协议·http
zyjyyds1132 小时前
win11系统 Docker Desktop 突然提示Docker Engine stopped解决情况之一
运维·docker·容器
Altairr2 小时前
Docker基础(一)
运维·docker·容器·eureka
筏.k2 小时前
grep、wc 与管道符快速上手指南
linux