目录
7.建立[service].service 配置文件添加系统给服务
在 /usr/local/awstats/tools 目录下 更新数据
一、Apache 连接保持
HTTP 是属于应用层的面向对象协议,基于 TCP 协议之上的可靠传输。每次在进行HTTP 连接之前,需要先进行 TCP 连接,在 HTTP 连接结束后要对 TCT 连接进行终止,每个 TCP 连接都需要进行三次握手与四次断开。HTTP 协议不会对之前发生过的请求和响应进行管理,所以建立与关闭连接对于 HTTP 而言会消耗更多的内存与 CPU 资源。能不能允许通过同一个 TCP 连接发出多个请求,从而减少与多个连接相关的延迟,解决办法就是连接保持。对于 HTTP/1.1,就是尽量地保持客户端的连接,通过一个连接传送多个 HTTP 请求响应,对于客户端可以提高 50%以上的响应时间,对于服务器可以降低资源开销。Apache通过设置配置文件httpd-default.conf中相关的连接保持参数开启与控制连接保持功能。
可优化参数:
- KeepAlive 决定是否打开连接保持功能,后面接 OFF 表示关闭,接 ON 表示打开,可以根据网站的并发请求量决定是否打开,即在高并发时打开连接保持功能,并发量不高时关闭此功能。
- KeepAliveTimeout 表示一次连接多次请求之间的最大间隔时间,即两次请求之间超过该
时间连接就会自动断开,从而避免客户端占用连接资源。[root@localhost opt]# yum -y install \ > gcc \ > gcc-c++ \ > make \ > pcre-devel \ > expat-devel \ > perl
- MaxKeepAliveRequests 用于设置在一次长连接中可以传输的最大请求数量,超过此最大请求数量就会断开连接,最大值的设置决定于网站中网页的内容,一般设置数量会多于网站中所有的元素
安装apache
1.解压安装包
[root@localhost opt]# tar xf apr-1.6.2.tar.gz
[root@localhost opt]# tar xf apr-util-1.6.0.tar.gz
[root@localhost opt]# tar xf httpd-2.4.29.tar.bz2
[root@localhost opt]# yum -y install bzip2
2.移动到指定目录
[root@localhost opt]# mv apr-1.6.2 httpd-2.4.29/srclib/apr
[root@localhost opt]# mv apr-util-1.6.0 httpd-2.4.29/srclib/apr-util
3.安装环境
[root@localhost opt]# yum -y install \
> gcc \ ###C语言的编译器
> gcc-c++ \ ###C++的编译器
> make \ ###源代码编译(源代码转换成二进制文件)
> pcre-devel \ ###支持正则表达式
> expat-devel \ ###网站解析HTML文件
> perl ###perl编译器
4. ./configure配置
[root@localhost opt]# cd /opt/httpd-2.4.29/
[root@localhost httpd-2.4.29]# ./configure \
--prefix ##指定将 httpd 服务程序安装到哪个目录下,如/usr/local/httpd
--enable-so ##启用动态加载模块支持,使 httpd 具备进一步扩展功能的能力。
--enable-rewrite ##启用网页地址重写功能,用于网站优化及目录迁移维护。
--enable-charset-lite ##启动字符集支持,以便支持使用各种字符集编码
--enable-cg ##启用 CGI 脚本程序支持,便于扩展网站的应用访问能力。
5.编译及安装
[root@localhost httpd-2.4.29]# make -j2 && make install
6.优化执行路径
[root@localhost httpd-2.4.29]# ln -s /usr/local/httpd/conf/httpd.conf /etc/
[root@localhost httpd-2.4.29]# ln -s /usr/local/httpd/bin/* /usr/local/bin/
[root@localhost httpd-2.4.29]# httpd -v ##查看http版本
Server version: Apache/2.4.29 (Unix)
Server built: Nov 18 2020 11:50:54
7.建立[service].service 配置文件添加系统给服务
[root@localhost ~]# cd /lib/systemd/system
[root@localhost system]# vim httpd.service
[Unit]
Description=The Apache HTTP Server
[Unit]
Description=The Apache HTTP Server
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/httpd/logs/httpd.pid
ExecStart= /usr/local/bin/apachectl $OPTIONS
ExecrReload= /bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
8.启动服务
[root@localhost system]# systemctl start httpd.service
二、Apache 的访问控制
通过 Require 配置项,可以根据客户端的主机名或 IP 地址来决定是否允许客户端访问。在 httpd 服务的主配置文件的<Location>、<Directory>、<Files>、<Limit>配置段中均可以使用 Require 配置项来控制客户端的访问。使用 Require 配置项时,需要设置客户端地址以构成完整的限制策略,地址形式可以是 IP 地址、网络地址、主机名或域名。当 Require 配置项之后为“all”时,表示匹配任意地址。
限制策略的格式如下所示:
- Require all granted:允许所有主机访问;
- Require all denied:拒绝所有主机访问;
- Require local:仅允许本地主机访问;
- Require [not] host <主机名或域名列表>:允许或拒绝指定主机或域名访问;
- Require [not] ip <IP 地址或网段列表>:允许或拒绝指定 IP 地址网络访问。
限制只能ip为192.168.174.52的主机访问
.
<Directory "/usr/local/httpd/htdocs/bbs">
…… //省略部分内容
Require ip 192.168.174.52
</Directory>
仅禁止一部分主机访问
禁止来自两个内网网段 192.168.100.0/24 和 192.168.1.0/24 的主机访问,但允许其他任何主机访问,可以使用如下限制策略:
<Directory "/usr/local/httpd/htdocs/bbs">
…… //省略部分内容
<RequireAll>
Require all granted
Require not ip 192.168.0.0/24 192.168.1.0/24
</RequireAll>
</Directory>
添加用户授权配置:
httpd 的基本认证通过校验用户名、密码组合来判断是否允许用户访问。授权访问的用户账号需要事先建立,并保存在固定的数据文件中。使用专门的 htpasswd 工具程序,可以创建授权用户数据文件,并维护其中的用户账号。使用 htpasswd 工具时,必须指定用户数据文件的位置,添加“-c”选项表示新建立此文件。例如,执行以下操作可以新建数据文件/usr/local/httpd/conf/.awspwd,其中包含一个名为 webadmin 的用户信息
vim /usr/local/httpd/conf/httpd.conf
…… ####省略部分内容
<Directory "/usr/local/httpd/htdocs">
…… ####省略部分内容
AuthName "DocumentRoot"
AuthType Basic
AuthUserFile /usr/local/httpd/conf/.awspwd
Require valid-user
</Directory>
systemctl restart httpd ####重启服务使配置生效
四、Apache 日志分割
随着网站的访问量越来越大,默认情况下 Apache 服务器产生的单个日志文件也会越来越大,如果不对日志进行分割,那么如果日志文件占用磁盘空间很大的话势必会将整个日志文件删除,这样也丢失了很多对网站比较宝贵的信息,而这些日志可以用来进行访问分析、网络安全监察、网络运行状况监控等。另外,如果服务器遇到故障时,运维人员要打开日志文件进行分析,打开的过程会消耗很长时间,也势必会增加处理故障的时间。因此管理好这些海量的日志对网站的意义很大,我们会将 Apache 的日志进行按每天的日期自动分割。下面介绍两种方法均可实现。
1.Apache 自带 rotatelogs 分割工具
首先我们将 Apache 主配置文件 httpd.conf 打开,配置网站的日志文件转交给 rotatelogs分割处理
[root@localhost ~]# vim /usr/local/httpd/conf/httpd.conf
Listen 192.168.174.51:80 #开启ipv4监听本地
#Listen 80 #注释ipv6
ServerName www.moon.com:80
启动服务,查看端口和日志文件
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# netstat -anpt | grep 80
tcp 0 0 192.168.174.51:80 0.0.0.0:* LISTEN 1779/httpd
[root@localhost ~]# ll /usr/local/httpd/logs/
总用量 12
-rw-r--r--. 1 root root 1634 11月 19 10:29 access_log
-rw-r--r--. 1 root root 2378 11月 19 10:28 error_log
-rw-r--r--. 1 root root 5 11月 19 10:28 httpd.pid
2. 使用第三方工具 cronolog 分割
编译安装cronolog工具
[root@localhost ~]# tar xf cronolog-1.6.2.tar.gz
[root@localhost ~]# cd cronolog-1.6.2/
[root@localhost cronolog-1.6.2]# ./configure
[root@localhost cronolog-1.6.2]# make -j2 && make install
再次查看已经生成新的日志文件
[root@localhost ~]# ll /usr/local/httpd/logs/
总用量 12
-rw-r--r--. 1 root root 1776 11月 19 11:13 access_log
五.Awstats分析系统
Awstats分析系统简介
在 httpd 服务器的访问日志文件 access_log 中,记录了大量的客户机访问信息,通过 分析这些信息,可以及时了解 Web 站点的访问情况,如每天或特定时间段的访问 IP 数量, 点击量最大的页面等。
AWStats是使用Perl语言开发的一款开源日志分析系统,它不仅可用来分析Apache 网 站服务器的访问日志,也可以用来分析 Samba、Vsftpd、IIS 等服务的日志信息。结合 crond 等计划任务服务,可以对不断增长的日志内容定期进行分析。
部署Awstats分析系统
[root@localhost ~]# mkdir /usr/local/awstats
[root@localhost ~]# cd /opt/
[root@localhost opt]# tar xf awstats-7.7.tar.gz -C /usr/local/awstats[root@localhost opt]# cd /usr/local/awstats/
[root@localhost awstats]# cd /usr/local/awstats/awstats-7.7/
[root@localhost awstats-7.7]# ll
总用量 16
drwxr-xr-x. 4 zhf zhf 4096 1月 7 2018 docs
-rw-r--r--. 1 zhf zhf 7249 1月 7 2018 README.md
drwxr-xr-x. 6 zhf zhf 4096 8月 28 2016 tools
drwxr-xr-x. 7 zhf zhf 69 11月 4 2013 wwwroot
为要统计的站点建立配置文件
[root@localhost 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.moon.com
修改httpd的配置文件
[root@localhost tools]# vi /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>
<Directory "/usr/local/awstats/wwwroot">
AllowOverride None
Options None
Require all granted
</Directory>
修改站点统计配置文件
[root@localhost tools]# systemctl restart httpd
[root@localhost tools]# vi /etc/awstats/awstats.www.tom.com.conf
……省略部分
LogFile="/usr/local/httpd/logs/access_log" //指定访问日志文件路径
……省略部分
DirData="/var/lib/awstats" //设置awstats数据文件目录,默认为/var/lib/awstats
[root@localhost tools]# mkdir /var/lib/awstats
[root@localhost tools]# chmod +x awstats_updateall.pl
[root@localhost tools]# ./awstats_updateall.pl
在 /usr/local/awstats/tools 目录下 更新数据
[root@localhost tools]# ./awstats_updateall.pl now
Running '"/usr/local/awstats/wwwroot/cgi-bin/awstats.pl" -update -config=www.moon.com -configdir="/etc/awstats"' to update config www.moon.com
Create/Update database for config "/etc/awstats/awstats.www.moon.com.conf" by AWStats version 7.7 (build 20180105)
From data in log file "/usr/local/httpd/logs/access_log"...
Phase 1 : First bypass old records, searching new record...
Searching new records from beginning of log file...
Jumped lines in file: 0
Parsed lines in file: 0
Found 0 dropped records,
Found 0 comments,
Found 0 blank records,
Found 0 corrupted records,
Found 0 old records,
Found 0 new qualified records.
执行日志分析,并设置 cron 计划任务
[root@localhost tools]# crontab -e
*/3 * * * * /usr/local/awstats/tools/awstats_updateall.pl now
[root@localhost tools]# systemctl start crond
[root@localhost tools]# systemctl enable crond
优化访问路径
[root@localhost tools]# vi /usr/local/httpd/htdocs/awb.html
<html>
<head>
<meta http-equiv=refresh content="0;
url=http://192.168.174.51/awstats/awstats.pl?config=www.moon">
</head>
<body></body>