前言
- 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
- 一次连接能够传输的最大请求数量
- KeepAlive
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"> Require not ip 192.168.100.100 '//表示不允许ip192.168.100.100访问' Require all granted </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:加密密码
举例
[root@localhost abc]# htpasswd -c /etc/httpd/conf/aaa ddd New password: Re-type new password: Adding password for user ddd [root@localhost abc]# cat /etc/httpd/conf/aaa ddd:$apr1$zwIklPGy$ZINaIkXsSq36oIk2lAiiJ1 '//添加第二个用户' [root@localhost abc]# htpasswd /etc/httpd/conf/aaa bbb New password: Re-type new password: Adding password for user bbb [root@localhost 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>
举例
[root@localhost abc]# vim vhost.conf
...省略内容
<VirtualHost 192.168.197.100:80>
DocumentRoot "/var/www/html/ccc"
ServerName www.ccc.com
Errorlog "logs/www.ccc.com.error_log"
Customlog "logs/www.ccc.com.custom_log" common
<Directory "/var/www/html">
AuthName "DocumentRoot"
AuthType Basic
AuthUserFile /etc/httpd/conf/aaa
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 例如 [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
2.2.1:日志文件的产生
- 服务安装后,不会生成日志文件不会产生
- 服务启动后,生成日志文件
- 访问服务后,日志文件会生成内容
2.3:AWStats日志分析
2.3.1:AWStats概述
- perl语言(骆驼语言)开发的一款开源日志分析系统
- 可用来分析Apache,Samba,vsftpd,IIS等服务器的访问日志
- 信息结合crond等计划任务服务,可对日志内容定期进行分析
2.3.2:部署AWStats环境准备
-
环境部署
VMware软件
一台centos7虚拟机
一台Windows虚拟机
-
环境准备
WindowsDNS解析地址指向centos7
centos7安装bind和httpd
2.3.3:部署AWStats过程
-
配置dns服务
[root@localhost opt]# vim /etc/named.conf options { listen-on port 53 { any; }; '//修改成any' ...省略内容 allow-query { any; }; '//修改成any' [root@localhost ~]# vim /etc/named.rfc1912.zones zone "dabao.com" IN { type master; file "dabao.com.zone"; allow-update { none; }; }; [root@localhost ~]# cd /var/named/ [root@localhost named]# cp -p named.localhost dabao.com.zone [root@localhost named]# vim dabao.com.zone '//尾行修改为下面内容' www IN A 192.168.197.143 [root@localhost named]# systemctl start named
-
配置httpd
[root@localhost named]# vim /etc/httpd/conf/httpd.conf '//修改此两行内容' Listen 192.168.197.143:80 #Listen 80 '//修改为指定域名' ServerName www.dabao.com:80 [root@localhost named]# systemctl stop firewalld.service [root@localhost named]# setenforce 0 [root@localhost named]# systemctl start httpd.service
-
安装AWStats
[root@localhost ~]# mount.cifs //192.168.100.3/ccc /opt Password for root@//192.168.100.3/ccc: [root@localhost ~]# df -h [root@localhost ~]# cd /opt [root@localhost opt]# tar zxvf awstats-7.6.tar.gz -C /mnt [root@localhost opt]# cd /mnt [root@localhost mnt]# ls awstats-7.6 [root@localhost mnt]# mv awstats-7.6/ /usr/local/awstats [root@localhost mnt]# ls [root@localhost mnt]# cd /usr/local [root@localhost local]# ls awstats bin etc games include lib lib64 libexec sbin share src [root@localhost local]# cd awstats/ [root@localhost awstats]# ls docs README.md tools wwwroot [root@localhost awstats]# cd tools/ [root@localhost tools]# ls [root@localhost tools]# ./awstats_configure.pl > /etc/httpd/conf/httpd.conf '//第一次交互输入此路径' y '//第二次交互输入y' www.dabao.com '//第三次交互输入指定域名' '//第四五六次交互直接回车' [root@localhost tools]# cd /etc/httpd/conf [root@localhost conf]# vim httpd.conf '//省略内容,直接到文件末尾修改此配置' <Directory "/usr/local/awstats/wwwroot"> Options None AllowOverride None # Order allow,deny # Allow from all Require all granted </Directory> [root@localhost conf]# cd /etc/awstats/ [root@localhost awstats]# ls awstats.www.dabao.com.conf [root@localhost awstats]# vim awstats.www.dabao.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 ...省略内容 [root@localhost tools]# ./awstats_updateall.pl now ...省略内容
-
再次访问网站,数据统计成功
2.3.4:配置周期性任务
-
[root@localhost tools]# crontab -e '//添加一下内容' */3 * * * * /usr/local/awstats/tools/awstats_updateall.pl now [root@localhost tools]# systemctl start crond You have new mail in /var/spool/mail/root [root@localhost tools]# cd /var/www/html [root@localhost html]# vim aws.html <html> <head> <meta http-equiv=refresh content="0;url=http://www.dabao.com/awstats/awstats.pl?config=www.dabao.com"> </head> <body></body> </html>
-
此时可以直接使用www.dabao.com/aws.html访问网页
三:Apache虚拟主机
3.1:虚拟web主机概述
- 在同一台服务器中运行多个web站点,其中每一个站点并不独立占用一台真正的计算机
- 通过虚拟web主机可以充分利用服务器的硬件资源,从而大大降低网站构建及运行成本
- 使用httpd可以非常方便的构建虚拟主机服务器,只需要运行一个httpd服务就能够同时支撑大量的web站点
3.2:httpd支持的虚拟主机类型
- 基于域名
- 为每个虚拟主机使用不同的域名,但是其对应的IP地址使相同的
- 域名不同–IP相同,端口相同
- 基于域名是最为普遍的虚拟web主机类型
- 基于IP地址
- 为每个虚拟主机使用不同的域名,且各自对应的IP地址也不相同
- 这种方式需要为服务器配备多个网络接口,因此应用不是很广泛
- IP不同,端口相同
- 基于端口
- 这种方式并不使用域名,IP地址来区分不同的站点内容,而是使用不同的TCP端口号
- 因此用户在浏览不同的虚拟站点时需要同时制定端口号才能访问
- IP相同,端口不同
3.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>
3.3:生产环境中虚拟主机概述
-
生产环境中,服务器不止两台
-
每台服务器都有虚拟主机对应各自的网站
-
通过调度服务器调取服务器中的网站资源
3.4:构建虚拟主机–基于域名实例演示
3.4.1:环境准备
-
VMware软件
-
一台Windows虚拟机,IP地址为192.168.197.133
-
一台centos7虚拟机,IP地址为192.168.197.141
-
centos7安装bind和httpd服务
[root@localhost ~]# yum install bind httpd -y
3.4.2:实例演示目的
- 在Windows虚拟机浏览器中访问这两个域名时,分别显示不同的内容
3.4.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 "dabao.com" IN { type master; file "dabao.com.zone"; allow-update { none; }; }; zone "erbao.com" IN { type master; file "erbao.com.zone"; allow-update { none; }; }; ...省略内容
-
编辑区域数据文件
[root@localhost ~]# cd /var/named/ [root@localhost named]# ls data dynamic named.ca named.empty named.localhost named.loopback slaves [root@localhost named]# cp -p named.localhost dabao.com.zone [root@localhost named]# vim dabao.com.zone ...省略内容 '//末尾添加内容' www IN A 192.168.197.141 [root@localhost named]# cp -p dabao.com.zone erbao.com.zone
-
开启服务并测试
[root@localhost named]# systemctl start named
3.4.4:配置httpd服务
-
创建站点,并添加虚拟主机配置
[root@localhost named]# cd /etc/httpd/conf [root@localhost conf]# ls httpd.conf magic [root@localhost conf]# mkdir baobao [root@localhost conf]# ls baobao httpd.conf magic [root@localhost conf]# cd baobao [root@localhost baobao]# ls [root@localhost baobao]# vim vhost.conf 1 <VirtualHost *:80> 2 DocumentRoot "/var/www/html/dabao" 3 ServerName www.dabao.com 4 Errorlog "logs/www.dabao.com.error_log" 5 Customlog "logs/www.dabao.com.custom_log" common 6 <Directory> "/var/www/html"> 7 Require all granted 8 </Directory> 9 </VirtualHost> 10 11 <VirtualHost *:80> 12 DocumentRoot "/var/www/html/erbao" 13 ServerName www.erbao.com 14 Errorlog "logs/www.erbao.com.error_log" 15 Customlog "logs/www.erbao.com.custom_log" common 16 <Directory> "/var/www/html"> 17 Require all granted 18 </Directory> 19 </VirtualHost>
-
编辑虚拟机网页文档
[root@localhost baobao]# cd /var/www/html/ [root@localhost html]# ls [root@localhost html]# mkdir dabao erbao [root@localhost html]# ls dabao erbao [root@localhost html]# echo "this is dabao" > dabao/index.html [root@localhost html]# echo "this is erbao" > erbao/index.html [root@localhost html]# yum install tree [root@localhost html]# tree /var/www/html/ /var/www/html/ ├── dabao │ └── index.html └── erbao └── index.html 2 directories, 2 files
-
编辑httpd主配置文件,添加虚拟主机站点
[root@localhost html]# vim /etc/httpd/conf/httpd.conf '//找到此行' IncludeOptional conf.d/*.conf Include conf/baobao/vhost.conf '//添加此行内容'
-
开启httpd服务,并测试
[root@localhost html]# systemctl start httpd
3.5:构建虚拟主机–基于端口实例演示
3.5.1:环境准备
- 环境继承上一个实例的环境
3.5.2:实例演示目的
- 在浏览器中访问不同端口,显示不同内容
3.5.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 baobao httpd.conf magic [root@localhost conf]# cd baobao [root@localhost baobao]# ls vhost.conf [root@localhost baobao]# vim vhost.conf '//在第二个主机配置后添加80' <VirtualHost *:8080> '//多写一个80'
-
设置监听地址
[root@localhost baobao]# vim /etc/httpd/conf/httpd.conf Listen 192.168.197.141:80 Listen 192.168.197.141:8080 '//找到监听地址,开启IPv4监听,设置监听地址,添加一个8080端口的监听地址' #Listen 80 '//关闭IPv6监听'
-
重启服务,验证
[root@localhost baobao]# systemctl restart httpd.service
3.6:构建虚拟主机–基于不同IP实例演示
3.6.1:环境准备
- 继承以上实验环境
- centos虚拟主机添加一张网卡
- 通过ifconfig查看得知第二张网卡IP地址为192.168.197.180
3.6.2:实例目的
- 在浏览器访问两个IP时,分别显示不同的内容
3.6.3:配置httpd服务
-
虚拟主机配置
[root@localhost baobao]# vim vhost.conf <VirtualHost 192.168.197.141:80> '//将*修改为第一张网卡IP地址' <VirtualHost 192.168.197.180:80> '//将*修改为第二张网卡IP地址' '//将他们的域名都注释掉'
-
设置监听地址
[root@localhost baobao]# vim /etc/httpd/conf/httpd.conf ...省略内容 Listen 192.168.197.141:80 Listen 192.168.197.180:80 #Listen 80 ...省略内容
-
重启服务,验证
[root@localhost baobao]# systemctl restart httpd