Linux--Apache配置与应用(构建虚拟web主机、Apache的访问权限控制、Apache的日志分割与分析)
一:构建虚拟web主机
在同一台服务器中运行多个web站点,其中每一个站点并不独立占用一台真正的计算机。
httpd支持的虚拟主机类型:
- 基于域名的虚拟主机
- 基于端口的虚拟主机
- 基于IP地址的虚拟主机
1.1:基于域名的虚拟主机
实验描述:构建两个虚拟web站点(www.nxd.com、www.bixy.com),在浏览器中访问这两个域名时分别显示不同的内容。
1.1.1:实验环境
一台Linux虚拟主机
一台Windows虚拟主机
1.1.2:实验步骤
1.1.2.1:安装实验所需的软件包
[root@promote ~]# yum install httpd bind -y
1.1.2.2:配置域名服务的主配置文件
[root@promote named]# vim /etc/named.conf
12 options {
13 listen-on port 53 { any; }; #括号中改为any
14 listen-on-v6 port 53 { ::1; };
15 directory "/var/named";
16 dump-file "/var/named/data/cache_dump.db";
17 statistics-file "/var/named/data/named_stats.txt";
18 memstatistics-file "/var/named/data/named_mem_stats.txt";
19 recursing-file "/var/named/data/named.recursing";
20 secroots-file "/var/named/data/named.secroots";
21 allow-query { any; }; #括号中改为any
1.1.2.3:配置域名服务的区域文件
[root@promote named]# vim /etc/named.rfc1912.zones
#增加以下字段
24 zone "nxd.com" IN {
25 type master;
26 file "nxd.com.zone";
27 allow-update { none; };
28 };
29 zone "bjxy.com" IN {
30 type master;
31 file "bjxy.com.zone";
32 allow-update { none; };
33 };
1.1.2.4:配置域名服务的区域数据文件
[root@promote named]# cd /var/named/
[root@promote named]# ls
data dynamic named.ca named.empty named.localhost named.loopback slaves
[root@promote named]# cp -p named.localhost nxd.com.zone
[root@promote named]# vim nxd.com.zone
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.1
www IN A 192.168.209.134 ##增加此行
[root@promote named]# cp -p nxd.com.zone bjxy.com.zone
[root@promote named]# ls
bjxy.com.zone data dynamic named.ca named.empty named.localhost named.loopback nxd.com.zone slaves
1.1.2.5:启动服务,用window主机验证
[root@promote named]# iptables -F
[root@promote named]# setenforce 0
[root@promote named]# systemctl start named
更改window虚拟机的DNS服务的地址为Linux虚拟主机的地址
(前提:两台主机能通信)
1.1.2.6:编写一个httpd服务的子配置文件
[root@promote ~]# cd /etc/httpd/
[root@promote httpd]# ls
conf conf.d conf.modules.d logs modules run
[root@promote httpd]# mkdir extra
[root@promote httpd]# cd extra/
[root@promote extra]# vim vhost.conf
<VirtualHost *:80>
DocumentRoot "/var/www/html/nxd" #指定站点目录
ServerName www.nxd.com #域名
Errorlog "logs/www.nxd.com.error_log" #错误日志文件路径
Customlog "logs/www.nxd.com.access_log" common #访问日志文件路径
<Directory "/var/www/html">
Require all granted #指定访问权限
</Directory>
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/var/www/html/bjxy"
ServerName www.bjxy.com
Errorlog "logs/www.bjxy.com.error_log"
Customlog "logs/www.bjxy.com.access_log" common
<Directory "/var/www/html">
Require all granted
</Directory>
</VirtualHost>
1.1.2.7:编写站点文件
[root@promote extra]# cd /var/www/html/
[root@promote html]# ls
[root@promote html]# mkdir nxd bjxy
[root@promote html]# ls
bjxy nxd
[root@promote html]# cd nxd/
[root@promote nxd]# vim index.html
<h1>this is nxd web!</h1>
[root@promote nxd]# cd ../bjxy/
[root@promote bjxy]# vim index.html
<h1>this is bjxy web!</h1>
1.1.2.8:在httpd主配置文件中添加子配置文件的路径
[root@promote bjxy]# vim /etc/httpd/conf/httpd.conf
#在最后一行写入以下字段
Include /etc/httpd/extra/vhost.conf
1.1.2.9:重启服务,在window虚拟机上验证
[root@promote httpd]# systemctl restart httpd
1.2:基于端口的虚拟主机
实验要求:访问同一个域名的不同端口,显示不同的网站
1.2.1:修改原有子配置文件
[root@promote httpd]# vim extra/vhost.conf
<VirtualHost *:80>
DocumentRoot "/var/www/html/nxd"
ServerName www.nxd.com
Errorlog "logs/www.nxd.com.error_log"
Customlog "logs/www.nxd.com.access_log" common
<Directory "/var/www/html">
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:8080>
DocumentRoot "/var/www/html/nxd02"
ServerName www.nxd.com
Errorlog "logs/www.nxd02.com.error_log"
Customlog "logs/www.nxd02.com.access_log" common
<Directory "/var/www/html">
Require all granted
</Directory>
</VirtualHost>
1.2.2:编写站点文件
[root@promote httpd]# cd /var/www/html/
[root@promote html]# ls
bjxy nxd
[root@promote html]# mkdir nxd02
[root@promote html]# cd nxd02/
[root@promote nxd02]# vim index.html
<h1>this is nxd02 web!</h1>
1.2.3:更改主配置文件,添加监听端口
[root@promote nxd02]# vim /etc/httpd/conf/httpd.conf
Listen 192.168.209.134:80
Listen 192.168.209.134:8080
#Listen 80
1.2.4:重启服务,用window虚拟机进行验证
[root@promote nxd02]# systemctl restart httpd
1.3:基于IP地址的虚拟主机
1.3.1:给Linux主机配置双网卡
#配置过程不再描述,可以看到有两块网卡ens33和ens36
[root@promote nxd02]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.209.134 netmask 255.255.255.0 broadcast 192.168.209.255
inet6 fe80::692f:adf0:b798:89bc prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:19:bd:1b txqueuelen 1000 (Ethernet)
RX packets 163329 bytes 226980567 (216.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 71359 bytes 4780683 (4.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens36: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.209.135 netmask 255.255.255.0 broadcast 192.168.209.255
inet6 fe80::2703:212d:c892:c6a5 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:19:bd:25 txqueuelen 1000 (Ethernet)
RX packets 13 bytes 1346 (1.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 27 bytes 4599 (4.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
1.3.2:修改子配置文件
[root@promote network-scripts]# vim /etc/httpd/extra/vhost.conf
<VirtualHost 192.168.209.134:80>
DocumentRoot "/var/www/html/bjxy"
Errorlog "logs/www.bjxy.com.error_log"
Customlog "logs/www.bjxy.com.access_log" common
<Directory "/var/www/html">
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.209.135:80>
DocumentRoot "/var/www/html/bjxy02"
Errorlog "logs/www.bjxy02.com.error_log"
Customlog "logs/www.bjxy02.com.access_log" common
<Directory "/var/www/html">
Require all granted
</Directory>
</VirtualHost>
1.3.3:编写站点目录
[root@promote network-scripts]# cd /var/www/html/
[root@promote html]# ls
bjxy nxd nxd02
[root@promote html]# mkdir bjxy02
[root@promote html]# cd bjxy02/
[root@promote bjxy02]# vim index.html
<h1>this is bjxy02 web!</h1>
1.3.4:修改主配置文件增加监听地址
[root@promote ~]# vim /etc/httpd/conf/httpd.conf
Listen 192.168.209.134:80
Listen 192.168.209.135:80
1.3.5:重启服务,进行验证
[root@promote ~]# systemctl restart httpd
二:Apache的访问权限控制
2.1:Apache的连接保持
- KeepAlive
是否打开连接保持,OFF关闭、ON打开 - KeepAliveTimeout
一次连接多次请求之间的最大间隔时间,两次请求超过该时间连接断开 - MaxKeepAliveRequests
一次长连接能够传输的最大请求数量
以上都可以在主配置文件中进行添加,默认没有。
2.2:Apache的访问控制
- 作用
控制对网站资源的访问
为特定的网站目录添加访问权限 - 常用访问控制方式
客户机地址限制
用户授权限制
2.3:基于客户端地址的访问控制
- 使用Require配置项实现访问控制,按先后顺序限制
- 可用于、、、配置段中
- Require配置项的常见语法
Require all granted
Require all denied
Require local
Require [not] host<主机名或域名列表>
Require [not] ip<IP地址或网段列表>
使用not禁止访问时要将其置于容器中,并在容器中指定相应的限制策略
2.3.1:对子配置文件作IP地址的访问控制
[root@promote ~]# vim /etc/httpd/extra/vhost.conf
2.3.2:重启服务,用两台主机验证
此时被限制IP地址的主机已不能访问网站页面
没被限制IP地址的主机依然能够访问网站页面
2.4:用户授权限制
2.4.1:创建用户认证数据库
[root@promote ~]# cat /etc/httpd/conf/.awspwd #确认用户数据库文件
webadmin:$apr1$pOo5PJsV$ljorIErzS.kT7.JaAEvJn1
2.4.2:添加用户授权配置
[root@promote ~]# vim /etc/httpd/extra/vhost.conf
2.4.3:重启服务登录验证
输入账号密码之后可以正常访问网站
三:Apache的日志分割
随着网站的访问量增加,默认情况下Apache的单个日志文件也会越来越大
- 日志文件占用磁盘空间越来越大
- 查看相关信息不方便
对日志文件进行分割
- Apache自带rotatelogs分割工具实现
- 第三方工具cronolog分割
3.1:rotatelogs分割工具
配置格式:
ErrorLog “|rotatelogs命令的绝对路径 -l 日志文件路径/网站名-error_%Y%m%d.log 86400”
CustomLog “|rotatelogs命令的绝对路径 -l 日志文件路径/网站名-access_%Y%m%d.log 86400” combined
- 以www.nxd.com网站为例,修改子配置文件
之后重新启动服务,查看日志文件
[root@localhost httpd]# systemctl restart httpd
[root@localhost httpd]# cd /var/log/httpd/
[root@localhost httpd]# ls
access_log error_log www.nxd.com.error_20200808.log www.nxd.com.access_20200808.log #对网站进行访问时会产生访问日志文件
3.2:第三方工具cronolog分割
- 安装cronolog的rpm包
[root@localhost opt]# ls
cronolog-1.6.2-14.el7.x86_64.rpm rh
[root@localhost opt]# rpm -ivh cronolog-1.6.2-14.el7.x86_64.rpm
警告:cronolog-1.6.2-14.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID 352c64e5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:cronolog-1.6.2-14.el7 ################################# [100%]
- 查看命令路径
[root@localhost opt]# which cronolog
/usr/sbin/cronolog
- 修改配置文件
配置格式:
ErrorLog “|cronolog命令的绝对路径 日志文件路径/网站名-error_%Y%m%d.log”
CustomLog “|cronolog命令的绝对路径 日志文件路径/网站名-access_%Y%m%d.log” combined
<VirtualHost *:80>
DocumentRoot "/var/www/html/nxd"
ServerName www.nxd.com
Errorlog "| /usr/sbin/cronolog logs/www.nxd.com.error_%Y%m%d.log"
Customlog "| /usr/sbin/cronolog logs/www.nxd.com.access_%Y%m%d.log" combined
<Directory "/var/www/html">
Require all granted
</Directory>
</VirtualHost>
- 重启服务,查看日志文件
[root@localhost opt]# systemctl restart httpd
[root@localhost opt]# cd /var/log/httpd/
[root@localhost httpd]# ls
四:Apache的日志分析
4.1:AWStats日志分析系统
- Perl语言开发的一款开源日志分析系统
- 可以用来分析Apache、Samba、vsftpd、IIS等服务器的访问日志
- 结合crontab等计划任务服务,可对日志内容定期进行分析
4.2:部署AWSTats日志分析系统
4.2.1:解压压缩包,并移动到awstats的默认目录
[root@localhost ~]# cd /opt
[root@localhost opt]# ls
awstats-7.6.tar.gz rh
[root@localhost opt]# tar xzvf awstats-7.6.tar.gz
[root@localhost opt]# ls
awstats-7.6 awstats-7.6.tar.gz rh
[root@localhost opt]# mv awstats-7.6 /usr/local/awstats
4.2.2:为要统计的站点建立配置文件
[root@localhost opt]# 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 awstats_updateall.pl httpd_conf nginx xslt
awstats_configure.pl dolibarr logresolvemerge.pl urlaliasbuilder.pl
awstats_exportlib.pl geoip_generator.pl maillogconvert.pl webmin
[root@localhost tools]# ./awstats_configure.pl
根据提示设置站点的配置文件路径
根据提示添加站点的域名
一路回车
4.2.3:修改配置文件、站点统计配置文件
[root@localhost tools]# vim /etc/httpd/extra/vhost.conf
<Directory "/usr/local/awstats/wwwroot">
Options None
AllowOverride None
# Order allow,deny #注释此行
# Allow from all #注释此行
Require all granted #添加权限
</Directory>
[root@localhost tools]# vim /etc/awstats/awstats.www.nxd.com.conf
LogFile="/var/log/htttpd/access_log"
DirData="/var/lib/awstats" ## /var/lib/下没有awstats目录,需要自己创建
4.2.4:执行日志分析,并设置crontab计划任务
https://www.nxd.com/awstats/awstats.pl?config=www.nxd.com
此时没有访问数据,需要到/usr/local/awstats/tools目录下,执行刷新功能
[root@localhost tools]# ./awstats_updateall.pl now
之后再游览日志分析站点就有了数据
这样每次进行日志分析时都需要先刷新,比较麻烦,可以用crontab设计周期性刷新的计划任务
[root@localhost tools]# crontab -e
#每隔5分钟刷新一次
*/5 * * * * /usr/local/awstats/tools/awstats_updateall.pl now
4.2.5:优化日志分析站点的路径
每次打开站点时路径比较长不容易记,可对站点的URL进行优化
[root@localhost tools]# cd /var/www/html/
[root@localhost html]# ls
bjxy bjxy02 nxd nxd02
[root@localhost html]# cd nxd
[root@localhost html]# vim aws.html
<html>
<head>
<meta http-equiv=refresh content="0;url=http://www.nxd.com/awstats/awstats.pl?config=www.nxd.com">
</head>
<body></body>
</html>
此时就可以直接使用http://www.nxd.com/aws.html来直接访问日志分析的站点了。