前言
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>容器中,并在容器中指定相对应的限制策略'
例如
[root@localhost ~]# cd /etc/httpd/conf
[root@localhost conf]# ls
httpd.conf magic
[root@localhost conf]# mkdir abc
[root@localhost conf]# ls
abc httpd.conf magic
[root@localhost conf]# cd abc
[root@localhost abc]# vim vhost.conf
<VirtualHost *:80>
...省略内容
<Directory "/var/www/html">
<RequireALL>
Require not ip 192.168.100.8 '//表示不允许ip192.168.100.8访问'
Require all granted
<RequireALL>
</Directory>
</VirtualHost>
...省略内容
1.2.3:用户授权限制–添加用户授权配置
'//配置基本格式'
<Directory "/var/www/html">
AuthName "DocumentRoot" '//受保护的领域名称'
AuthType Basic '//认证类型'
AuthUserFile /etc/httpd/conf/qwe '//用户认证账号文件'
Require valid-user '//要求通过认证才能访问'
</Directory>
例如:
<VirtualHost 192.168.100.100:80>
DocumentRoot "/var/www/html/accp02"
Errorlog "logs/www.accp02.com.error_log"
Customlog "logs/www.accp02.com.access_log" common
<Directory "/var/www/html" >
AuthName "DocumentRoot"
AuthType basic
AuthUserFile /etc/httpd/conf/pwd
Require valid-user
</Directory>
</VirtualHost>
验证
二、Apache虚拟主机
2.1:虚拟web主机概述
在同一台服务器中运行多个web站点,其中每一个站点并不独立占用一台真正的计算机
通过虚拟web主机可以充分利用服务器的硬件资源,从而大大降低网站构建及运行成本
使用httpd可以非常方便的构建虚拟主机服务器,只需要运行一个httpd服务就能够同时支撑大量的web站点
2.2:httpd支持的虚拟主机类型
基于域名
为每个虚拟主机使用不同的域名,但是其对应的IP地址使相同的
域名不同–IP相同,端口相同
基于域名是最为普遍的虚拟web主机类型
基于IP地址
为每个虚拟主机使用不同的域名,且各自对应的IP地址也不相同
这种方式需要为服务器配备多个网络接口,因此应用不是很广泛
IP不同,端口相同
基于端口
这种方式并不使用域名,IP地址来区分不同的站点内容,而是使用不同的TCP端口号
因此用户在浏览不同的虚拟站点时需要同时制定端口号才能访问
IP相同,端口不同
2.2.1:添加虚拟主机配置格式
[root@localhost ~]# vim /etc/http/conf/xxx/vhost.conf
1 <VirtualHost *:80> '//针对本服务器所有IP地址'
2 DocumentRoot "/var/www/html/xxx" '//指定站点目录'
3 ServerName www.xxx.com '//指定域名'
4 Errorlog "logs/www.xxx.com.error_log" '//指定错误日志路径'
5 Customlog "logs/www.xxx.com.custom_log" common '//指定访问日志路径'
6 <Directory> "/var/www/html">
7 Require all granted '//设置网页允许所有主机访问,也可以通过denied设置拒绝访问'
8 </Directory>
9 </VirtualHost>
2.3构建虚拟主机–基于域名实例演示
2.3.1:环境准备
VMware软件
一台Windows虚拟机,IP地址为192.168.100.77
一台centos7虚拟机,IP地址为192.168.195.80
centos7安装bind和httpd服务
[root@localhost ~]# yum install bind httpd -y
2.3.2:实例演示目的
在Windows虚拟机浏览器中访问这两个域名时,分别显示不同的内容
2.3.3:为虚拟主机提供域名解析
关闭防火墙,编辑主配置文件
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# vim /etc/named.conf
...省略内容
options {
listen-on port 53 { any; }; '//修改为any'
listen-on-v6 port 53 { ::1; };
...省略内容
allow-query { any; }; '//修改为any'
...省略内容
编辑区域配置文件
[root@localhost ~]# vim /etc/named.rfc1912.zones
'//添加一下两端内容'
...省略内容
zone "accp.com" IN {
type master;
file "accp.com.zone";
allow-update { none; };
};
zone "kgc.com" IN {
type master;
file "kgc.com.zone";
allow-update { none; };
};
...省略内容
编辑区域数据文件
[root@promote ~]# cd /var/named
[root@promote named]# ls
chroot dynamic named.ca named.localhost slaves
data dyndb-ldap named.empty named.loopback
[root@promote named]# cp -p named.localhost accp.com.zone
[root@promote named]# vim accp.com.zone
...省略内容
'//末尾添加内容'
www IN A 192.168.100.80
[root@promote named]# cp -p accp.com.zone kgc.com.zone
开启服务并测试
2.3.4:配置httpd服务
创建站点,并添加虚拟主机配置
[root@promote httpd]# cd conf
[root@promote conf]# ls
httpd.conf magic
[root@promote conf]# mkdir extra
[root@promote conf]# ls
extra httpd.conf magic
[root@promote conf]# cd extra/
[root@promote extra]# vim vhost.conf
1 <VirtualHost *:80>
2 DocumentRoot "/var/www/html/accp"
3 ServerName www.accp.com
4 Errorlog "logs/www.accp.com.error_log"
5 Customlog "logs/www.accp.com.access_log" common
6 <Directory "/var/www/html" >
7 </Directory>
8 Require all granted
9 </VirtualHost>
10 <VirtualHost *:80>
11 DocumentRoot "/var/www/html/kgc"
12 ServerName www.kgc.com
13 Errorlog "logs/www.kgc.com.error_log"
14 Customlog "logs/www.kgc.com.access_log" common
15 <Directory "/var/www/html" >
16 </Directory>
17 Require all granted
18 </VirtualHost>
编辑虚拟机网页文档
[root@promote httpd]# cd /var/www/html/
[root@promote html]# ls
[root@promote html]# mkdir accp kgc
[root@promote html]# ls
accp kgc
[root@promote html]# cd accp
[root@promote accp]# vim index.html
<h1>this is accp web</h1>
[root@promote accp]# cd ../kgc/
[root@promote kgc]# vim index.html
<h1>this is kgc web</h1>
编辑httpd主配置文件,添加虚拟主机站点
[root@localhost html]# vim /etc/httpd/conf/httpd.conf
'//找到此行'
IncludeOptional conf.d/.conf
Include conf/extra/vhost.conf '//添加此行内容'
开启httpd服务,并测试
[root@localhost html]# systemctl start httpd
2.4:构建虚拟主机–基于端口实例演示
2.4.1:环境准备
环境继承上一个实例的环境
2.4.2:实例演示目的
在浏览器中访问不同端口,显示不同内容
2.4.3:配置httpd服务
配置虚拟主机配置
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# systemctl start httpd
[root@localhost html]# cd /etc/httpd/conf
[root@localhost conf]# ls
extra httpd.conf magic
[root@localhost conf]# cd extra
[root@localhost baobao]# ls
vhost.conf
[root@localhost extra]# vim vhost.conf
'//在第二个主机配置后添加80'
<VirtualHost *:8080> '//多写一个80'
创建kgc02的站点
[root@promote extra]# cd /var/www/html
[root@promote html]# ls
accp kgc
[root@promote html]# mkdir kgc02
[root@promote html]# cd kgc02
[root@promote kgc02]# vim index.html
<h1>this is kgc02 web</h1>
设置监听地址
[root@promote extra]# vim /etc/httpd/conf/httpd.conf
Listen 192.168.100.80:80
Listen 192.168.100.80:8080'//找到监听地址,开启IPv4监听,设置监听地址,添加一个8080端口的监听地址'
#Listen 80 '/关闭IPv6监听'
重启服务,验证
[root@promote kgc02]# systemctl restart httpd
2.5:构建虚拟主机–基于不同IP实例演示
2.5.1:环境准备
继承以上实验环境
centos虚拟主机添加一张网卡
第一张网卡ip:192.168.100.80
第二张网卡ip:192.168.100.100
2.5.2:实例目的
在浏览器访问两个IP时,分别显示不同的内容
2.5.3:配置httpd服务
虚拟主机配置
'//将他们的域名都注释掉'
<VirtualHost 192.168.100.80:80> '//将*修改为第一张网卡IP地址'
DocumentRoot "/var/www/html/accp"
Errorlog "logs/www.accp.com.error_log"
Customlog "logs/www.accp.com.access_log" common
<Directory "/var/www/html" >
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.100.100:80> '//将*修改为第二张网卡IP地址'
DocumentRoot "/var/www/html/accp"
Errorlog "logs/www.accp02.com.error_log"
Customlog "logs/www.accp02.com.access_log" common
<Directory "/var/www/html" >
Require all granted
</Directory>
</VirtualHost>
[root@promote accp02]# vim /etc/httpd/conf/httpd.conf
Listen 192.168.100.80:80
Listen 192.168.100.100:80
三:Apache日志管理
3.1:日志分割
随着网站的访问量增大,默认情况下Apache的单个日志文件也会越来越大
日志文件占用磁盘空间很大
查看相关信息不方便
对日志文件进行分割
Apache自带rotatelogs分割工具实现
第三方工具cronolog分割
3.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
例如
[root@localhost 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
3.2.1:日志文件的产生
服务安装后,不会生成日志文件不会产生
服务启动后,生成日志文件
访问服务后,日志文件会生成内容
3.3:第三方工具- -cronolog分割工具
配置格式为
ErrorLog "| /usr/sbin/cronolog logs/www.kgc.com.error_%Y%m%d.log
CustomLog "| /usr/sbin/cronolog logs/www.kgc.com.access_%Y%m%d.log" combined
[root@promote httpd]# systemctl restart httpd
[root@promote httpd]# ls /var/log/httpd/
access_log error_log www.kgc.com.error_20200806.log
3.4:AWStats日志分析
3.41:AWStats概述
perl语言(骆驼语言)开发的一款开源日志分析系统
可用来分析Apache,Samba,vsftpd,IIS等服务器的访问日志
信息结合crond等计划任务服务,可对日志内容定期进行分析
3.4.2:部署AWStats环境准备
环境部署
VMware软件
一台centos7虚拟机
一台Windows虚拟机
环境准备
WindowsDNS解析地址指向centos7
centos7安装bind和httpd
3.3.3:部署AWStats过程
安装AWstats
[root@localhost ~]# cd /opt
[root@localhost opt]# ls
cronolog-1.6.2-14.el7.x86_64.rpm rh
[root@localhost opt]# rz -E
rz waiting to receive.
[root@localhost opt]# ls
awstats-7.6.tar.gz cronolog-1.6.2-14.el7.x86_64.rpm rh
[root@localhost opt]# tar zxvf awstats-7.6.tar.gz -C /opt/
Enter full config file path of your Web server.
Example: /etc/httpd/httpd.conf
Example: /usr/local/apache2/conf/httpd.conf
Example: c:\Program files\apache group\apache\conf\httpd.conf
Config file path ('none' to skip web server setup):
> /etc/httpd/conf/httpd.conf
-----> Check and complete web server config file '/etc/httpd/conf/httpd.conf'
Add 'Alias /awstatsclasses "/usr/local/awstats/wwwroot/classes/"'
Add 'Alias /awstatscss "/usr/local/awstats/wwwroot/css/"'
Add 'Alias /awstatsicons "/usr/local/awstats/wwwroot/icon/"'
Add 'ScriptAlias /awstats/ "/usr/local/awstats/wwwroot/cgi-bin/"'
Add '<Directory>' directive
AWStats directives added to Apache config file.
-----> Update model config file '/usr/local/awstats/wwwroot/cgi-bin/awstats.model.conf'
File awstats.model.conf updated.
-----> Need to create a new config file ?
Do you want me to build a new AWStats config/profile
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.kgc.com
[root@localhost tools]# vim /etc/httpd/conf/httpd.conf
<Directory "/usr/local/awstats/wwwroot">
Options None
AllowOverride None
# Order allow,deny
# Allow from all
Require all granted
[root@localhost tools]# cd /etc/awstats/
[root@localhost awstats]# ls
awstats.www.kgc.com.conf
[root@localhost awstats]# vim awstats.www.kgc.com.conf
...省略内容
'//将下面两行内容修改'
LogFile="/var/log/httpd/access_log"
...省略内容
DirData="/var/lib/awstats"
[root@localhost awstats]# cd /var/lib
[root@localhost lib]# ls
[root@localhost lib]# mkdir awstats
[root@localhost lib]# systemctl restart httpd.service
尝试访问awstats网页
使用刚刚交互生成的网址访问,将其中的localhost修改为指定域名
更新网页访问数据的统计
[root@localhost lib]# 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
[root@localhost tools]# ./awstats_updateall.pl now