Apache配置与应用

一、Apache 连接保持

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

1、KeepAlive 决定是否打开连接保持功能,后面接 OFF 表示关闭,接 ON 表示打开,可以根据网站的并发请求量决定是否打开,即在高并发时打开连接保持功能,并发量不高时关闭此功能。

2、KeepAliveTimeout 表示一次连接多次请求之间的最大间隔时间,即两次请求之间超过该时间连接就会自动断开,从而避免客户端占用连接资源。

3、MaxKeepAliveRequests 用于设置在一次长连接中可以传输的最大请求数量,超过此最大请求数量就会断开连接,最大值的设置决定于网站中网页的内容,一般设置数量会多于网站中所有的元素

举例:

1.1、先安装Apache服务,见源码编译构建LAMP服务中有Apache服务的安装,登录服务端配置测试页

1 [root@localhost ~]# cd /usr/local/httpd/htdocs
2 [root@localhost htdocs]# echo "welcome to www.xuhao.com" >index.html
3 [root@localhost htdocs]# ll
4 总用量 16
5 -rw-r--r--.  1 root root   25 2月  24 21:07 index.html
6 -rw-r--r--.  1 root root  125 2月  21 09:43 index.php
7 drwxr-xr-x. 12 root root 4096 2月  21 09:46 myadm
8 [root@localhost htdocs]# cat index.html 
9 welcome to www.xuaho.com

1.2、登录客户端抓包分析,利用Wireshark抓包软件选择vmnet1,点击开始,用客户端访问并查看信息

 

 

 

默认keepalive是开启的,timeout是5s,max是100

1.3、配置主配置文件及连接保持

1 vi /usr/local/httpd/conf/httpd.conf
2 Include conf/extra/httpd-default.conf      ####将前面的#号去掉,表示开启该模块
3 vi /usr/local/httpd/conf/extra/httpd-default.conf
4 KeepAlive On                                    ####保持连接开启(默认开启)
5 MaxKeepAliveRequests 200             ####一次连接最多请求200个文件(默认100个)
6 KeepAliveTimeout 10                       ####无响应超时踢下线时间设置10秒(默认5秒)

1.4、重启服务并再次抓包验证

1 systemctl restart httpd      ###配置完毕重启httpd

总结:

1、环境网络网段仅主机环境

2、修改配置 --主配置文件httpd.conf

Include conf/extra/httpd-default.conf开启  去掉#

3、修改进httpd/conf/extra/httpd-default.conf修改

KeepAlive On

MaxKeepAliveRequests

KeepAliveTimeout

4、重启http服务

5、抓包测试

 

二、Apache 的访问控制

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

1、Require all granted:允许所有主机访问;

2、Require all denied:拒绝所有主机访问;

3、 Require local:仅允许本地主机访问;

4、 Require [not] host <主机名或域名列表>:允许或拒绝指定主机或域名访问;

5、 Require [not] ip <IP 地址或网段列表>:允许或拒绝指定 IP 地址网络访问。

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

举例1:默认目录允许所有

1 vi /etc/httpd.conf
1 <Directory "/usr/local/httpd/htdocs">
2                    ######省略部分内容
3 Require all granted
4 </Directory>

举例2:只希望 IP 地址为 192.168.110.1的主机能够访问

1 vi /etc/httpd.conf
1 <Directory "/usr/local/httpd/htdocs/bbs"> 
2 …… //省略部分内容
3 Require ip 192.168.100.2
4 </Directory>

举例3:只希望禁止来自两个内网网段 192.168.100.0/24 和 192.168.1.0/24 的主机访问,但允许其他任何主机访问

1 vi /etc/httpd.conf
1 <Directory "/usr/local/httpd/htdocs/bbs">
2  …… //省略部分内容
3 <RequireAll>
4 Require all granted
5 Require not ip 192.168.0.0/24 192.168.1.0/24
6 </RequireAll>
7 </Directory>

三、用户授权限制

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

举例:

3.1、设置基本认证的用户名和密码,新建需要加-c,后续添加不用加-c

1 [root@www ~]# cd /usr/local/httpd/
2 [root@www httpd]# bin/htpasswd -c /usr/local/httpd/conf/.awspwd webadmin
3 New password:                                                                      ####根据提示设置密码
4 Re-type new password:                                                          ####根据提示设置密码
5 Adding password for user webadmin
6 [root@www httpd]# cat /usr/local/httpd/conf/.awspwd       ####确认用户数据文件
7 webadmin:$apr1$L53Ws/Y2$3L4xhs4zZKDbJb.9p1fNg.

3.2、添加用户授权配置并重启服务

 1 root@www ~]# vim /usr/local/httpd/conf/httpd.conf 
 2 ……                                                        ####省略部分内容
 3 <Directory "/usr/local/httpd/htdocs"> 
 4 ……                                                        ####省略部分内容
 5 AuthName "DocumentRoot" 
 6 AuthType Basic
 7 AuthUserFile /usr/local/httpd/conf/.awspwd
 8 Require valid-user
 9 </Directory>
10 [root@www ~]# systemctl restart httpd               ####重启服务使配置生效

在上述配置内容中,相关配置项的含义如下。

1、AuthName:定义受保护的领域名称,该内容将在浏览器弹出的认证对话框中显示。

2、AuthType:设置认证的类型,Basic 表示基本认证。

3、AuthUserFile:设置用于保存用户账号、密码的认证文件路径。

4、require valid-user:要求只有认证文件中的合法用户才能访问。其中,valid-user

表示所有合法用户,若只授权给单个用户,可改为指定的用户名(如 webadmin)

注:要把原来允许所有注释掉#Require all granted

3.3、测试

 

 

四、Apache 日志分割

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

4.1、 Apache 自带 rotatelogs 分割工具

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

4.1.1、新建日志存储目录

1 [root@www ~]# mkdir /var/log/httpd/

4.1.2、编辑配置文件

[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" common  

4.1.3、重启服务并测试查看

1 [root@www ~]# systemctl restart httpd
2 [root@www ~]# ll /var/log/httpd/
3 总用量 8
4 -rw-r- r- 1 root root 1814 77 17:54 access_20180707.log
5 -rw-r- r- 1 root root 584 77 17:55 error_20180707.log

没有访问所以没有用户日志,客户端访问一下再查看

 

4.2、 使用第三方工具 cronolog 分割

4.1.1、将cronolog软件上传到root目录下

4.1.2、编译安装cronolog工具

1 [root@www ~]# tar zxvf cronolog-1.6.2.tar.gz
2 [root@www ~]# cd cronolog-1.6.2
3 [root@www cronolog-1.6.2]# ./configure
4 [root@www cronolog-1.6.2]# make && make install

4.1.3、设置 cronolog 工具工具分割 apache 日志

1 [root@www ~]# vim /usr/local/httpd/conf/httpd.conf
2 ErrorLog "|/usr/local/sbin/cronolog /var/log/httpd/www.51xit.top-error_%Y%m%d.log" 
3 CustomLog "|/usr/local/sbin/cronolog /var/log/httpd/www.51xit.top-access_%Y%m%d.log" common

4.1.4、重启服务并测试查看

1 [root@www ~]# systemctl restart httpd
2 [root@www ~]# ll /var/log/httpd/ | grep "www.51xit.top"
3 -rw-r- r- 1 root root 603 77 18:15 www.51xit.com-access_20180707.log
4 -rw-r- r- 1 root root 584 77 18:14 www.51xit.com-error_20180707.log

注意:存储日志文件的目录不要忘记创建

 

五、部署 AWStats 分析系统

5.1、将需要的软件上传到/opt目录下

5.2、安装 AWStats 软件包

1 [root@localhost httpd]# cd /opt
2 [root@localhost opt]# tar zxf awstats-7.7.tar.gz
3 [root@localhost opt]# mv awstats-7.7 /usr/local/awstats

5.3、为要统计的站点建立配置文件,首先切换到 awstats/tools 目录下,并执行其中的 awstats_configure.pl 脚本

1 [root@www ~]# cd /usr/local/awstats/tools/
2 [root@www tools]# chmod +x awstats_configure.pl
3 [root@www tools]# ./awstats_configure.pl

后将会进入一个交互式的配置过程,将会检查 awstats 的安装目录、httpd 服务的配

置文件路径、日志记录格式等系统环境,并提示用户指定站点名称、设置配置文件路径

 1 ----- AWStats awstats_configure 1.0 (build 20140126) (c) Laurent Destailleur -----
 2 
 3 -----> Running OS detected: Linux, BSD or Unix
 4 -----> Check for web server install
 5 Enter full config file path of your Web server. Example: /etc/httpd/httpd.conf
 6 Example: /usr/local/apache2/conf/httpd.conf
 7 Example: c:Program filesapache groupapacheconfhttpd.conf
 8 Config file path ('none' to skip web server setup):
 9 >/usr/local/httpd/conf/httpd.conf                      ####输入 httpd.conf 配置文件的路径,输入错误按Ctrl + backspace
10 
11 ###设置日志类型###
12       将 httpd 服务器的日志记录格式改为“combined”,服务器可以在日志文件中记录更加详
13 细的 Web 访问信息。因此,当提示是否修改日志类型时,建议选择“y”。然后配置脚本,将
14 会自动修改 httpd.conf 配置文件,以添加访问 AWStats 系统的相关配置内容
15 -----> Check and complete web server config file '/usr/local/httpd/conf/httpd.conf' Warning: You Apache config file contains directives to write 'common' log files
16 This means that some features can't work (os, browsers and keywords
17 detection). Do you want me to setup Apache to write 'combined' log files [y/N] ?      ####输入 y     
18 Add 'Alias /awstatsclasses "/usr/local/awstats/wwwroot/classes/"' 
19 Add 'Alias /awstatscss "/usr/local/awstats/wwwroot/css/"' 
20 Add 'Alias /awstatsicons "/usr/local/awstats/wwwroot/icon/
21 Add 'ScriptAlias /awstats/ "/usr/local/awstats/wwwroot/cgi-bin/"
22 Add '<Directory>' directive
23 AWStats directives added to Apache config file.
24 -----> Update model config file
25 '/usr/local/awstats/wwwroot/cgi-bin/awstats.model.conf' File awstats.model.conf 
26 
27 ###为指定 Web 站点创建配置文件###
28       根据提示继续选择“y”以创建站点配置文件,并指定要统计的目标网站名称、站点配置
29 文件的存放位置(默认为/etc/awstats)。
30 
31 -----> Need to create a new config file ?
32 Do you want me to build a new AWStats config/profile
33 file (required if first install) [y/N] ?     y                      ###确认创建新的站点配置文件
34 -----> Define config file name to create
35 What is the name of your web site or profile analysis ?
36 Example: www.mysite.com
37 Example: demo
38 Your web site, virtual server or profile name:
39 > www.51xit.top                                                     ####指定要统计的目标网站名称
40 -----> Define config file path
41 In which directory do you plan to store your config file(s) ?
42 Default: /etc/awstats
43 Directory path to store config file(s) (Enter for default):                ####直接按 Enter 键接受默认设置
44 -----> Create config file '/etc/awstats/awstats.www.51xit.top.conf'
45 Config file /etc/awstats/awstats.www.kgc.com.conf created. 

5.4、修改配置文件

 1 [root@www ~]# vim /usr/local/httpd/conf/httpd.conf
 2 
 3 ErrorLog "logs/error_log" 
 4 CustomLog "logs/access_log" combined
 5 <IfModule !mpm_prefork_module>
 6 LoadModule cgid_module modules/mod_cgid.so        ###这边修改下
 7 </IfModule>
 8 <IfModule mpm_prefork_module>
 9 LoadModule cgi_module modules/mod_cgi.so            ###这边修改下
10 </IfModule>
11 <Directory "/usr/local/awstats/wwwroot">
12 Options None
13 AllowOverride None
14 #Order allow,deny                                                         ####注释掉
15 #Allow from all                                                              ####注释掉
16 Require all granted                                                       ####添加
17 </Directory>
18 
19 <Directory "/usr/local/awstats/wwwroot">
20 Options None
21 AllowOverride None
22 #Order allow,deny
23 #Allow from all
24 Require all granted
25 </Directory>

5.5、重启服务

1 [root@www ~]# systemctl restart httpd

5.6、修改站点统计配置文件

1 [root@www ~]# vim /etc/awstats/awstats.www.51xit.top.conf
2 LogFile="/usr/local/httpd/logs/access_log"        ##必须要和http指定日志文件存放的路径一致
3 DirData="/var/lib/awstats" 
4 
5 …… //省略部分内容

5.7、需要创建指定的目录(/var/lib/awstats)

1 [root@www ~]# mkdir /var/lib/awstats

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

1 [root@www ~]# crontab -e
2 */5 * * * * /usr/local/awstats/tools/awstats_updateall.pl now
3 [root@www ~]# systemctl start crond
4 [root@www ~]# systemctl enable crond

5.9、优化访问路径,在访问 AWStats 系统时,需要指定 awstats 目录、脚本位置、统计目标等信息,这样既不便于记忆,输入时也比较麻烦。为了简化操作,可以在 Web 根目录下建立一个自动跳转的 HTML 网页。例如,执行以下操作后,用户只要访问http://www.xuhao.com/awb.html,即可自动跳转到 www.51xit.top 站点的 AWStats 日志分析页面。

 1 [root@www ~]# cd /usr/local/awstats/tools/
 2 [root@www tools]# chmod +x awstats_updateall.pl
 3 [root@www tools]#./awstats_updateall.pl now        ###执行命令不要忘了加now
 4 [root@www ~]# vim /usr/local/httpd/htdocs/awb.html        ###这个采集数据的页面放在站点目录中
 5 <html>
 6 <head>
 7 <meta http-equiv=refresh content="0;
 8 url=http://20.0.0.10/awstats/awstats.pl?config=www.51xit.top">
 9 </head>
10 <body></body>
11 </html>

 

总结:

1、Apache 通过设置配置文件中相关的连接保持参数开启与控制连接保持功能。

2、httpd 服务通过 Require 配置项实现客户机地址访问控制。

3、httpd 服务通过 AuthName、AuthType、AuthUserfile 及 Require valid-user 配置项实现目录的用户授权。

4、为网站目录设置用户授权时,需要先通过 htpasswd 工具创建用户认证数据文件。

5、Apache 日志分割工具可以使用自带的 rotatelogs,也可以使用第三方工具 cronolog。

6、httpd 服务器的日志文件包括访问日志 access_log 与错误日志 error_log。

7、使用 AWStats 可以统计 Web 访问日志,并以网页界面的形式展现分析报告。

原文地址:https://www.cnblogs.com/xuhao0705/p/13814708.html