当前位置: 首页 > news >正文

Apache配置与应用

一、Apache连接保持

        HTTP 是属于应用层的面向对象协议,基于 TCP 协议之上的可靠传输。每次在进行HTTP 连接之前,需要先进行 TCP 连接,在 HTTP 连接结束后要对 TCP 连接进行终止,每个 TCP 连接都需要进行三次握手与四次断开。HTTP 协议不会对之前发生过的请求和响应进行管理,所以频繁地建立与关闭连接对于 HTTP 而言会消耗更多的内存与 CPU 资源。能不能允许通过同一个 TCP 连接发出多个请求,从而减少与多个连接相关的延迟,解决办法就是连接保持。
        对于 HTTP/1.1,就是尽量地保持客户端的连接,通过一个连接传送多个 HTTP 请求响应,对于客户端可以提高 50%以上的响应时间,对于服务器可以降低资源开销。
        Apache通过设置配置文件httpd-default.conf中相关的连接保持参数来开启与控制连接保持功能。

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

二、Apache的访问控制

        为了更好地控制对网站资源的访问,可以为特定的网站目录添加访问授权。本节将分别介绍客户机地址限制、用户授权限制,这两种访问控制方式都应用于 httpd.conf配置文件中的目录区域<Directory 目录位置>.... </Directory>范围内。

2.1客户机地址限制

        通过 Require 配置项,可以根据客户端的主机名或 IP 地址来决定是否允许客户端访问。在 httpd 服务主配置文件的<Location>、<Directory>、<Files>、<Limit>配置段中均可以使用 Require 配置项来控制客户端的访问。使用 Require 配置项时,需要设置客户端地址以构成完整的限制策略,地址形式可以是IP 地址、网络地址、主机名或域名。当 Require 配置项之后为“al”时,表示匹配任意地址。限制策略的格式如下所示。

  • Require all granted:允许所有主机访问:
  • Require all denied:拒绝所有主机访问;
  • Require local:仅允许本地主机访问;
  • Require [not host<主机名或域名列表>:允许或拒绝指定主机或域名访问:
  • Require [not] ip <IP 地址或网段列表>:允许或拒绝指定 IP 地址网络访问。

        通常情况下,网站服务器是对所有客户机开放的,网页文档目录并未做任何限制,因此使用的是“Require all granted"的策略,表示允许从任何客户机访问,策略格式如下所示。

<Directory "/usr/local/httpd/htdocs"> 
Require all granted 
</Directory>

        定义限制策略时,多个不带“not”的 Require 配置语句之间是“或”的关系,即任意一条Require 配置语句满足条件均可访问。若既出现了不带“not"的 Require 配置语句,又出现了带“not”的 Require 配置语句,则配置语句之间是“与”的关系,即同时满足所有 Require 配置语句才能访问。

        需要使用“仅允许”的限制策略时,应使用 Require 配置语句明确设置允许策略,只允许一部分主机访问。例如,若只希望IP 地址为 173.17.17.2的主机能够访问,目录区域应做如下设置。

<Directory "/usr/local/httpd/htdocs/wwwtest"> 
Require ip 173.17.17.2 
</Directory>

        反之,需要使用“仅拒绝”的限制策略时,灵活使用 Require 与 Require not 配置语句设置拒绝访问策略,仅禁止一部分主机访问。在使用not禁止访问时要将其置于<RequireAll></RequireAll>容器中,并在容器中设置相应的限制策略。例如,若只希望禁止来自两个内网网段 192.168.0.0/24和 192.168.1.0/24的主机访问,但允许其他任何主机访问,可以使用如下限制策略。

<Directory "/usr/local/httpd/htdocs/wwwroot"> 
<RequireAll> 
Require all granted 
Require not ip 192.168.0.0/24 192.168.1.0/24 
</RequireAll> 
</Directory>

        当未被授权的客户机访问网站目录时,将会被拒绝访问。

2.2 用户授权限制

        httpd 服务器支持使用摘要认证(Digest)和基本认证(Basic)两种方式。使用摘要认证需要在编译 httpd 之前添加"--enable-auth-digest"选项,但并不是所有的浏览器都支持摘要认证;而基本认证是 httpd 服务的基本功能,不需要预先配置特别的选项。

        基于用户的访问控制包含认证(Authentication)和授权(Authorization)两个过程认证是指识别用户身份的过程,授权是指允许特定用户访问特定目录区域的过程。下面将以基本认证方式为例,添加用户授权限制。

1.创建用户认证数据文件

        httpd 的基本认证通过校验用户名、密码组合来判断是否允许用户访问。授权访问的用户账号需要事先建立,并保存在固定的数据文件中。使用专门的 htpasswd 工具程序,可以创建授权用户数据文件,并维护其中的用户账号。
        使用 htpasswd 工具时,必须指定用户数据文件的位置,添加“-c”选项表示新建立此文件。例如,执行以下操作可以新建数据文件/usr/local/httpd/confl.awspwd,其中包含一个名为 webadmin 的用户信息。

[root@www ~]# cd /usr/local/httpd/ 
[root@www httpd]# bin/htpasswd -c /usr/local/httpd/conf/.awspwd webadmin 
[root@www httpd]# cat /usr/local/httpd/conf/.awspwd

        若省略“-c”"选项,则表示指定的用户数据文件已经存在,用于添加新的用户或修改现有用户的密码。例如,需要向.awspwd 数据文件中添加一个新用户 kcce 时,可以执行以下操作。

[root@www httpd]# bin/htpasswd /usr/local/httpd/conf!.awspwd kcce
New password:
Re-type new password:
Adding password for user kcce
[root@www httpd]# cat /usr/local/httpd/conf.awspwd //确认用户数据文件webadmin:$apr1$L53Ws/2$3L4xhs4zZKDbJb.9p1fNg
kcce:$apr1$OJIFi4TA$FaVYZnH2KH5KCOSHJHAWD0

2.添加用户授权配置

        有了授权用户账号以后,还需要修改 httpd.conf配置文件,在特定的目录区域中添加授权配置,以启用基本认证并设置允许哪些用户访问。例如,若只允许.awspwd 数据文件中的任一用户访问系统,可以执行以下操作。

[root@www ~]# vim /usr/local/httpd/conf/httpd.conf <Directory "/usr/local/httpd/htdocs"> 
#Require all granted
AuthName "DocumentRoot" 
AuthType Basic 
AuthUserFile /usr/local/httpd/conf/.awspwd 
Require valid-user 
</Directory> 
  • AuthName:定义受保护的领域名称,该内容将在浏览器弹出的认证对话框中显示。
  • AuthType:设置认证的类型,Basic 表示基本认证。
  • AuthUserFile:设置用于保存用户账号、密码的认证文件路径。
  • require valid-user:要求只有认证文件中的合法用户才能访问。
  • 3.验证用户访问授权

    •         当访问系统时,浏览器会首先弹出认证对话框,如图 3.1所示。只有输入正确的用户名和密码后才能查看特定目录下的网站资源,否则将拒绝访问。

三、Apache日志分割

        随着网站的访问量越来越大,默认情况下 Apache 服务器产生的单个日志文件也会越来越大,如果不对日志进行分割,那么如果日志文件占用磁盘空间很大的话势必会将整个日志文件删除,这样也丢失了很多对网站比较宝贵的信息,而这些日志可以用来进行访问分析、网络安全监察、网络运行状况监控等。
        另外,如果服务器遇到故障时,运维人员要打开日志文件进行分析,打开的过程会消耗很长时间,也势必会增加处理故障的时间。因此管理好这些海量的日志对网站的意义很大,我们会将 Apache 的日志进行按每天的日期自动分割。下面介绍两种方法均可实现。

1.Apache 自带 rotatelogs 分割工具

        首先,将 Apache 主配置文件 httpd.conf打开,配置网站的日志文件转交给 rotatelogs分割处理。

[root@www ~]# mkdir /var/log/httpd
[root@www ~]# vim /usr/local/httpd/conf/httpd.conf
ErrorLog "|/usr/local/bin/rotatelogs -l /var/log/httpd/error_%Y%m%d.log 86400" 
CustomLog "|/usr/local/bin/rotatelogs -l /var/log/httpd/access_%Y%m%d.log 86400" combined[root@www ~]# systemctl restart httpd

备注:

其中 ErrorLog 行是错误日志,

-l 表示使用本地时间代替 GMT (格林尼治时间)时间作为时间基准

CustomLog 行是定义访问日志格式,

86400 表示一天,即每天生成一个新的日志文件

combined:日志格式,组合日志格式

common:日志格式,通用日志格式

常见格式串:

%h是远程主机   192.168.10.3

%l是由identd确定的用户的身份   -

%u是HTTP身份验证确定的用户名    -

%t是服务器处理完请求的时间。   [19/Jul/2022:21:18:50 +0800]

%r是来自客户端的请求行(“GET/HTTP/1.0”)。    "GET / HTTP/1.1"

%> s是从服务器发送到客户端的状态代码(500,404等)   304 

%b是客户端响应的大小(以字节为单位)     -

%{Referer}i:请求报文中首部"referer" 的值;即从哪个页面中的超链接跳转至当前页面的,防止盗链,i就是首部的意思,Referer是链接到此URL的页面。

%{User-Agent}i此项是客户端提供的浏览器识别信息i是首部的意思,即请求头

%I:服务器接收得字节数,需要启用mod_logio模块。

%O:服务器发送得字节数,需要启用mod_logio模块。

备注:

  • identd身份认证:identd 是一个服务器,它按照 RFC 1413 文档中指定的方式实现 TCP/IP 提议的标准 IDENT 用户身份识别协议
  • HTTP身份验证:htpasswd生成账号密码后,使用的Basic类型的身份认证

combined格式示例

192.168.10.3 - - [19/Jul/2022:21:18:50 +0800] "GET / HTTP/1.1" 304 - "http://192.168.10.101/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"

common格式示例

192.168.10.3 - - [19/Jul/2022:21:19:45 +0800] "GET / HTTP/1.1" 304 -

通用格式和组合格式内容类似,组合格式多了两个请求头信息

第一个请求头示例:"http://www.baicai.link/" (\"%{Referer}i\") ##黄色部分,有时会显示一个横杠 "-"

"Referer"请求头。此项指明了该请求是被从哪个网页提交过来的,这个网页应该包含有/apache_pb.gif或者其连接。

第二个请求头示例:"Mozilla/4.08 [en] (Win98; I ;Nav)" (\"%{User-agent}i\") ##绿色部分

"User-Agent"请求头。此项是客户端提供的浏览器识别信息。

2.使用第三方工具 cronolog 分割

        除了 Apache 自带 rotatelogs 分割工具,也可使用第三方工具 cronolog 对 Apache 日志进行分割,具体操作如下所示。

(1)编译安装 cronolog 工具
[root@www ~]# tar zxvf cronolog-1.6.2.tar.gz 
[root@www ~]# cd cronolog-1.6.2 
[root@www cronolog-1.6.2]# ./configure 
[root@www cronolog-1.6.2]# make && make install
2)设置 cronolog 工具分割 apache 日志
[root@www ~]# vim /usr/local/httpd/conf/httpd.conf
将之前的ErrorLog和CustomLog注释掉,添加新的日志分割参数:
ErrorLog "|/usr/local/sbin/cronolog /var/log/httpd/www.benet.com-error_%Y%m%d.log" 
CustomLog "|/usr/local/sbin/cronolog /var/log/httpd/www.benet.com-access_%Y%m%d.log" combined
[root@www ~]# apachectl -t
[root@www ~]# apachectl restart

四、AWStats 日志分析

4.1部署 AWStats 分析系统

        AWStats 是使用 Per语言开发的一款开源日志分析系统,它不仅可用来分析Apache 网站服务器的访问日志,也可以用来分析 Samba、Vsftpd、llS 等服务的日志信息。结合 crond等计划任务服务,可以对不断增长的日志内容定期进行分析。
        AWStats 的软件包可以从官方网站下载。下面以 awstats-7.7.tar.gz 软件包为例,介绍为 Web 站点 www.kcg.com 添加 AWStats 日志分析系统的过程。

1.安装 AWStats 软件包

[root@www ~]# tar zxf awstats-7.7.tar.gz 
[root@www ~]# mv awstats-7.7 /usr/local/awstats

2.为要统计的站点建立配置文件

[root@www ~]# cd /usr/local/awstats/tools/ 
[root@www tools]# chmod +x awstats_configure.pl 
[root@www tools]# ./awstats_configure.pl
1)指定 httpd 主配置文件的路径
>/usr/local/httpd/conf/httpd.conf
2)为指定 Web 站点创建配置文件
>www.benet.com
(3)日志文件存储路径

默认位置即可,直接回车

(4)后续配置工作
[root@www ~]# vim /usr/local/httpd/conf/httpd.conf
在文件末尾,会发现多了<Directory "/usr/local/awstats/wwwroot">模块,修改里面的内容,并在模块前面添加如下内容:ErrorLog "logs/error_log" 
CustomLog "logs/access_log" combined 
<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">Options NoneAllowOverride None#Order allow,deny#Allow from allRequire all granted
</Directory>[root@www ~]# systemctl restart httpd

3.修改站点统计配置文件

[root@www ~]#vim /etc/awstats/awstats.www.benet.com.conf 
LogFile="/usr/local/httpd/logs/access_log" 
DirData="/var/lib/awstats" 
[root@www ~]#mkdir /var/lib/awstats

4.执行日志分析,并设置 cron 计划任务

[root@www ~]# cd /usr/local/awstats/tools/ 
[root@www tools]# chmod +x awstats_updateall.pl 
[root@www tools]#./awstats_updateall.pl now
[root@www ~]# crontab -e 
*/5 * * * * /usr/local/awstats/tools/awstats_updateall.pl now

4.2访问 AWStats 分析系统

1:访问站点 http://192.168.10.101/awstats/awstats.pl?config=www.benet.com

2:简化登录语句

[root@www ~]# vim /usr/local/httpd/htdocs/awb.html
<html> 
<head> 
<meta http-equiv=refresh content="0; 
url=http://www.benet.com/awstats/awstats.pl?config=www.benet.com"> 
</head> 
<body></body> 
</html>

访问awstat时输入链接http://www.benet.com/awb.html

备注:

如果客户端不能解析benet.com的域名,就将上面红色部分的域名直接改为IP地址,访问时的网址就变成了:http://192.168.10.101/awb.html

相关文章:

  • 10.GLM
  • SpringMVC-基础架构
  • 基于软件在环的飞控机建模仿真
  • 国外有哪些知名的CG网站?CG平台及云渲染平台
  • Kettle根据分类实现Excel文件拆分——kettle开发31
  • 视频格式转换avi格式怎么弄?分享视频转换方法
  • sqlcoder:7b sqlcoder:15b sqlcoder:70b 有什么区别呢?
  • 直接使用Three.js的 Shape和ExtrudeGeometry创建带孔几何体实现挖孔效果
  • Go模板页面浏览器显示HTML源码问题
  • 百度OCR初探-python
  • 怎么提升机器人外呼的转化效率
  • linux网络编程poll笔记
  • 实验12 路由重分布
  • STL-常用容器
  • Elastic 索引结构-倒排索引
  • 【Linux系统编程】快速查找errno错误码信息
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • CentOS 7 防火墙操作
  • export和import的用法总结
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • javascript 总结(常用工具类的封装)
  • Java应用性能调优
  • leetcode98. Validate Binary Search Tree
  • miaov-React 最佳入门
  • Phpstorm怎样批量删除空行?
  • spring boot 整合mybatis 无法输出sql的问题
  • vue脚手架vue-cli
  • Vue小说阅读器(仿追书神器)
  • 分类模型——Logistics Regression
  • 前端面试总结(at, md)
  • 十年未变!安全,谁之责?(下)
  • 使用API自动生成工具优化前端工作流
  • 移动端唤起键盘时取消position:fixed定位
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 怎么把视频里的音乐提取出来
  • 智能合约开发环境搭建及Hello World合约
  • ​520就是要宠粉,你的心头书我买单
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • # linux 中使用 visudo 命令,怎么保存退出?
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • # 透过事物看本质的能力怎么培养?
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (floyd+补集) poj 3275
  • (Java数据结构)ArrayList
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (二)丶RabbitMQ的六大核心
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统