什么是apache?以及apache配置

1,080 阅读13分钟

1、apache(即http协议)

apache和httpd之间的关系,简单理解就是 apache2以上版本改称为httpd。

1.1 http相关概念

http 超文本传输协议

配置文件:vim /etc/httpd/conf/httpd.conf

互联网分为:局域网、城域网、广域网, 其中,因特网是最大的广域网。

1.2 访问浏览器的过程

在浏览器中输入www.baidu.com,会经过下面5个过程:

  1. 浏览器的职责
  2. DNS 域名解析
  3. TCP 连接:三次握手、四次挥手
  4. HTTP 请求
  5. 浏览器的渲染原理

1.3 http协议通信过程

image.png

客户端向服务端发出请求,需要192.168.91.100/a.jpg文件,实际浏览的文件夹是:

软件名路径
httpd/var/www/html/a.jpg
nginx/usr/share/nginx/html/a.jpg

处理请求的顺序: 网卡 —> 内核 —> 程序

程序在用户空间,用户空间 和 内核空间 都在内存里面

小拓展:

1、客户打开网页,如何处理?

  • 首先看状态码,状态码的信息比较直接
  • 再查看日志,分析报错信息

2、/etc/mime.types 在里面的就是查看;里面没有的 就是下载

1.4 URL⭐⭐⭐

URL 与 URN,同属于URI(小i)统一资源标识。

  • URN 统一资源命名符

    描述了资源的名字

  • URL 统一资源定位符⭐⭐⭐

    用于描述某服务器某特定资源位置,资源的具体位置

1.4.1 URL完整格式:

 <scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
 拆分:
     scheme:方案,访问服务器以获取资源时要使用哪种协议⭐
     user:用户,某些方案访问资源时需要的用户名
     password:密码,用户对应的密码,中间用:分隔
     Host:主机,资源宿主服务器的主机名或IP地址⭐
     port:端口,资源宿主服务器正在监听的端口号,很多方案有默认端口号⭐
     path:路径,服务器资源的本地名,由一个/将其与前面的URL组件分隔⭐
     params:参数,指定输入的参数,参数为名/值对,多个参数,用;分隔
     query:查询,传递参数给程序,如数据库,用?分隔,多个查询用&分隔
     frag:片段,一小片或一部分资源的名字,此组件在客户端使用,用#分隔

1.4.2 URL基本格式:⭐⭐⭐

 协议://主机名:端口/路径
 scheme host  port path

1.5 网站访问量

  • pv 访问量, 即Page View, 页面浏览量或点击量
  • UV 独立访客

1.6 http的七个过程⭐⭐⭐

image.png

一次完整的http请求处理过程:

  1. 建立连接:三次握手
  2. 同意连接
  3. 处理请求:内核根据协议和端口号,找到相应的程序,程序根据自己的配置文件,分析处理客户的请求。
  4. 访问资源:分析出客户需要的资源后,再告诉内核,内核去找资源交给程序。
  5. 构建响应报文:程序拿到资源后,会构建响应报文。
  6. 发送响应报文:报文准备好后,会交给内核,内核交给网卡,网卡转发给客户端。
  7. 记录日志

小拓展:I/O结构是 input、output

1.7 http工作机制

1.7.1 串行和并行

  • 串行:1对1 每次只处理一个问题,效率慢,基本不用。
  • 并行:一起,对单个客户端,多次请求的优化,弊端是存在时延,如果第50个没有处理完,就不会开启第51个。

1.7.2 处理高并发的四个基本模型:

image.png

  1. 单线程I/O结构:串行,启动一个进程处理用户请求,而且一次只处理一个,多个请求被串行响应
  2. 多线程I/O结构:串行,并行启动多个进程,每个进程响应一个连接请求复用的I/O结构
  3. 复用I/O结构:启动一个进程,同时响应N个连接请求
  4. 复用的多线程I/O结构:启动M个进程,每个进程响应N个连接请求,同时接收M*N个请求

用的最多是第2个和第3个

1.7.3 提高HTTP连接性能:

  • 并行连接:单个客户端多次请求,通过多条TCP连接发起并发的HTTP请求
  • 持久连接:一次连接 多次下载,keep-alive,重用TCP连接,以消除连接和关闭的时延,以事务个数和时间来决定是否关闭连接
  • 管道化连接:通过共享TCP连接,发起并发的HTTP请求
  • 复用的连接:交替传送请求和响应报文

使用持久连接来进行优化,持久连接就是一次连接(三次握手)多次下载。持久连接 要比 并行效果好,处理效率更高。

小拓展:

1、结束持久连接的条件:

  • 时间限制
  • 下载资源个数的限制

2、一个进程里面最少要有一个线程。

3、改完配置文件为什么要重启?

因为修改是改在磁盘上的,内存并不知道进行了修改,重启是为了让磁盘和内存一致。

1.8 http协议的版本及区别⭐⭐⭐

http发明的初衷是共享文件

  1. http 0.9 :只支持下载,方法只有get(下载),不支持长连接
  2. http 1.0 :加入了多种方法,不止有get(下载)、post(上传)等,不支持长连接
  3. http 1.1:加入了长连接,(长连接也就是持久连接)

http1.1目前是市场主流

1.9 http 报文

报文主要分为 请求报文 和 回复报文

1.9.1 http请求报文

image.png

首部字段 主要是一些提示信息、注释

方法:

方法含义
GET获取资源 当前网络请求中,绝大部分使用的是 GET方法
HEAD获取报文首部,主要用于确认 URL 的有效性以及资源更新的日期时间等
POST传输实体主体 (比如传输 用户名密码)
PUT上传文件(比如写博客)
PATCH对资源进行部分修改
DELETE删除文件
OPTIONS查询支持的方法(查看服务端可以支持哪些方法)
CONNECT要求在与代理服务器通信时建立隧道(类似加密)
TRACE追踪路径

小实验:

实验目的:模拟http请求的过程

 关闭防火墙
 下载telnet
 telnet 192.168.125.100 80    //访问80端口
 get /index.html HTTP/1.1      //通过http1.1版本下载文件
 //方法    URL     版本
 HOST:1.1.1.1     //首部字段,随便设,自己定义

1.9.2 响应报文(回复报文)

image.png

 [root@7-3 ~]#  curl -I 192.168.125.130   
 HTTP/1.1   200     OK
 //版本     状态码   短语
 Date: Mon, 27 May 2024 12:03:14 GMT    //下面这些都是首部字段
 Server: Apache/2.4.6 (CentOS)
 Last-Modified: Thu, 23 May 2024 15:28:25 GMT
 ETag: "8-61920b3ba079e"
 Accept-Ranges: bytes
 Content-Length: 8
 Content-Type: text/html; charset=UTF-8

1.10 http 状态码⭐⭐⭐⭐⭐

 1xx(信息类):表示接收到请求并且继续处理
 2xx(响应成功):表示动作被成功接收、理解和接受
 3xx(重定向类):为了完成指定的动作,必须接受进一步处理
 4xx(客户端错误类):请求包含错误语法或不能正确执行
 5xx(服务端错误类):服务器不能正确执行一个正确的请求

http协议常用的状态码

 200: 成功,请求数据通过响应报文的entity-body部分发送;OK
 301: 请求的URL指向的资源已经被删除;但在响应报文中通过首部Location指明了资源现在所处的新位置;Moved Permanently
 302: 响应报文Location指明资源临时新位置 Moved Temporarily
 304: 客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此响应状态码通知客户端;Not Modified
 307:  浏览器内部重定向
 401: 需要输入账号和密码认证方能访问资源;Unauthorized
 403: 请求被禁止;Forbidden
 404: 服务器无法找到客户端请求的资源;Not Found
 500: 服务器内部错误;Internal Server Error,比如:cgi程序没有执行权限
 502: 代理服务器从后端服务器收到了一条伪响应,如无法连接到网关;Bad Gateway
 503: 服务不可用,临时服务器维护或过载,服务器无法处理请求,比如:php服务停止,无法处理php程序
 504: 网关超时

2、httpd安装组成

http基于C/S架构:

服务名:apache

安装软件名:httpd

2.1 常见http服务器程序

  • httpd apache,存在C10K(10K connections)问题
  • nginx 解决C10K问题 httpd
  • tomcat .jsp 应用程序服务器

国外用apache、中国用nginx

2.2 apache简介

2.2.1 apeche功能

  • 提供web服务(提供网页服务)

  • 多个虚拟主机,用一台物理服务器,搭建多个网站

  • CGI:Common Gateway interface,通用网关接口,支持动态程序。用CGI接口协议可以进行转发。

    tomcat擅长处理 动态资源

    nginx 擅长处理 静态资源

  • 反向代理:客户端访问代理,代理将请求转发给服务端。

    反向代理,代理的是 服务端;

    正向代理,代理的是 客户端

  • 负载均衡

2.2.2 apache特性⭐

  • 高度模块化:core + modules
  • DSO:Dynamic Shared Object 动态加载/卸载
  • MPM:multi-processing module 多路处理模块

2.3 MPM 三个工作模式及特点⭐⭐⭐

MPM 多路复用技术,处理高并发(同一时间多个用户同时访问)

长连接:处理 单个用户多次访问。

2.3.1 prefork

prefork: 多进程I/O模型,每个进程响应一个请求

系统初始时,预生成多个空闲进程,等待请求。

进程+子进程:

image.png

  • 优点:稳定,服务周到
  • 缺点:慢,占用资源,不适用于高并发场景

2.3.2 worker

worker:复用的多进程I/O模型,多进程多线程,一个主进程:生成m个子进程,每个子进程负责生个n个线程,每个线程响应一个请求,并发响应请求:m*n

image.png

  • 优点:相比prefork 占用的内存较少,可以同时处理更多的请求
  • 缺点:占用资源,某个线程会一直被占据,即使没有传输数据,也需要一直等待到超时才会被释放。

基本不用!

2.3.3 event

事件驱动模型,进程+子进程+线程

 修改配置:
 vim 00-mpm.conf
 //修改用prefork 还是用event
  • 优点:单线程响应多请求,占据更少的内存,高并发下表现更优秀
  • 缺点:没有线程安全控制 小拓展:怎么查看是哪种工作模式?
pstree -p |grep httpd

花括号代表 线程

2.4 httpd安装和相关文件

2.4.1 httpd相关文件

配置文件路径
主配置文件/etc/httpd/conf/httpd.conf
子配置文件/etc/httpd/conf.d/*.conf
模块加载的配置文件/etc/httpd/conf.d/conf.modules.d/

2.4.2 编译安装

 #编译安装
 ./configure --prefix=$install_dir --sysconfdir=/etc/httpd --enable-ssl
 ​
 make -j`lscpu | grep "^CPU(s)" | awk '{print $NF}'` && make install

一定要分清楚,是编译安装 还是yum安装

3、http常见配置

注意: 修改配置文件前,要先备份⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

优化:

  • 子配置文件
  • 隐藏版本号
  • 优化长连接

格式:

 关键字(命令)   选项
 ​
 <关键字>开始
 </关键字>结束    //结束要加斜杠

3.1 主配置文件

 使用yum安装的httpd,对应配置文件位置:/etc/httpd/conf/httpd.conf
 ​
 统计多少行配置文件:
 wc -l /etc/httpd/conf/httpd.conf
 353 /etc/httpd/conf/httpd.conf
 ​
 统计不包括注释的配置:
 grep -v "^#" /etc/httpd/conf/httpd.conf

3.2 httpd -t 检查格式命令

apache 最有用的选项:

 httpd -t   //检查格式的命令

3.3 监听端口

通式:Listen [IP:]端口号 1、如果省略IP,则默认为本机所有IP 2、Listen指令至少一个,可重复出现多次

 vim /etc/httpd/conf/httpd.conf
 listen 80   //监听80端口
 systemctl restart httpd    //改完配置,重启服务!!!
 ​
 #修改子配置文件
 cd /etc/httpd/conf.d
 vim test.conf
     listen 9527
 systemctl restart httpd
 ​
 #其他配置文件
 grep -i include /etc/httpd/conf/httpd.conf    //建议用include
 IncludeOptional conf.d/*.conf    //建议放在最后

说明:

  • Include和IncludeOptional功能相同,都可以包括其它配置文件
  • 但是当无匹配文件时,include会报错,IncludeOptional会忽略错误

3.4 隐藏服务器的版本信息(真正的调优)

 [root@7-3 ~]#  curl -I 192.168.125.130
 HTTP/1.1 200 OK
 Date: Mon, 27 May 2024 15:29:19 GMT
 Server: Apache/2.4.6 (CentOS)  //版本号会显示出来
 Last-Modified: Thu, 23 May 2024 15:28:25 GMT
 ETag: "8-61920b3ba079e"
 Accept-Ranges: bytes
 Content-Length: 8
 Content-Type: text/html; charset=UTF-8
 ​
 [root@7-3 ~]#  vim /etc/httpd/conf/httpd.conf   //编辑配置文件
     servertokens prod     //最下面加上规则配置,为什么要在最后面加,因为谁写在最后谁生效
 [root@7-3 ~]#  systemctl restart httpd    //重启服务

3.5 持久连接

断开条件:

  • 时间限制:以秒为单位, 默认5s,httpd-2.4 支持毫秒级
  • 请求数量: 请求数达到指定值,也会断开
 KeepAlive On|Off   //打开、关闭持久连接
 KeepAliveTimeout 15      #时间,连接持续15s,可以以ms为单位,默认值为5s
 MaxKeepAliveRequests 500    #数量,持久连接最大接收的请求数,默认值100

3.6 DSO

Dynamic Shared Object,加载动态模块配置,不需重启即生效。

动态模块所在路径: /usr/lib64/httpd/modules/

查看静态编译的模块: httpd -l

查看动态装载的模块: httpd -M

3.7 prefork模式相关的配置

 StartServers       100   //一开始开启100个进程,默认开启是5个
 MinSpareServers    50    //如果一直空闲需要最少预留 50个进程
 MaxSpareServers    80   //如果空闲,最大预留80个
 ServerLimit        2560 #最多进程数,最大值 20000
 MaxRequestWorkers    2560 #最大的并发连接数,默认256
 MaxConnectionsPerChild  4000 #子进程最多能处理的请求数量。在处理MaxRequestsPerChild 个
 请求之后,子进程将会被父进程终止,这时候子进程占用的内存就会释放(为0时永远不释放)
 MaxRequestsPerChild 4000  #从 httpd.2.3.9开始被MaxConnectionsPerChild代替

3.8 worker、event 模式相关的配置

 ServerLimit         16  #最多worker进程数 Upper limit on configurable number of 
 processes
 StartServers        10  #Number of child server processes created at startup
 MaxRequestWorkers  150  #Maximum number of connections that will be processed 
 simultaneously
 MinSpareThreads     25
 MaxSpareThreads     75
 ThreadsPerChild     25  #Number of threads created by each child process

3.9 修改主站点(实验一)⭐⭐

  1. 安装主目录
 ServerRoot "/etc/httpd"   //ServerRoot是主站点,作用是存放日志、配置文件、模块等
  1. 文档的主目录
 DocumentRoot "/var/www/html"
 //拆分:
     DocumentRoot:主站点文件存放的路径
     默认主页面:/var/www/html,可以自己定义!

小拓展:URL后面的根的位置,就是DocumentRoot 后设置的路径。

  1. 访问错误的托底设置
 vim /etc/httpd/conf.d/welcome.conf
 <LocationMatch "^/+$">
     Options -Indexes
     ErrorDocument 403 /.noindex.html   //托底设置:该配置的意思是如果报错,就默认访问/.noindex.html文件,这样是为了减少输错网址造成客户的流失
 </LocationMatch>
  1. 授权⭐⭐

\color{green}{想访问,先授权!}

实验一:修改主站点

 `7-1:`
 [root@7-1 ~]#  vim /etc/httpd/conf/httpd.conf
     ServerName www.example.com:80   //开启95行,不然会提示错误
     # DocumentRoot "/var/www/html"  //注释119行,做之前先备份
 ​
 ###########修改主站点##########
     DocumentRoot "/opt"   //将主站点 修改为/opt
     
 ###########修改完,再授权!##########
     <Directory "/opt">   //给/opt文件夹授权
         Require all granted  //全部可以访问
     </Directory>
     
 [root@7-1 ~]#  systemctl restart httpd
 [root@7-1 ~]#  httpd -t   //检查
 Syntax OK
 [root@7-1 ~]#  cd /opt
 [root@7-1 opt]#  echo "abc" > index.html  //
 ​
 `7-3:`
 [root@7-3 ~]#   curl 192.168.125.100
 abc

3.10 别名alias(实验二)⭐⭐⭐

类似于置换,作用是:脱离主站点,重新指定路径。

别名格式:

 alias  /URL/  /PATH/
 拆解:
     url:路径
     path:具体路径

例子:

 `例1:`
 alias  /123   /opt/456   //访问192.168.125.100/123  实际上相当于访问192.168.125.100/opt/456
 拆解:
     /123:实际是192.168.125.100/123
     /opt/456:第一个/是真正的根
 注意:/123可以是虚拟的,可以不真实存在。

实验二:定义别名

`7-1:`
[root@7-1 ~]#  vim  /etc/httpd/conf/httpd.conf

#############定义别名##############
alias  /admin   /opt/study   //访问192.168.125.100/admin,等于访问/opt/study目录下的文件
    
#############授权################
<Directory "/opt">
Require all granted
</Directory>
    
[root@7-1 ~]#  httpd -t
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::f3ee:389d:866c:6d14. Set the 'ServerName' directive globally to suppress this message
Syntax OK    //正常,开启95行,就不会提示该类错误
[root@7-1 ~]#  systemctl restart httpd
[root@7-1 ~]#  mkdir /opt/study
[root@7-1 ~]#  cd /opt/study

[root@7-1 study]#  echo "xyz" >index.html     //这一步,我的理解是在路径下新建一个测试页面,只有页面里有内容,才能测试出来效果。

`7-3`
验证方法一:
[root@7-3 ~]#  curl 192.168.125.100/admin/
xyz
验证方法二:
在浏览器中访问验证!!!

3.11 定义站点默认主页面文件 index.html

当我们访问服务器时 省略了最后的文件, 默认自动会加上 index.html,这个是可以修改的!!!

 [root@7-3 ~]#  grep "index.html" /etc/httpd/conf/httpd.conf
     DirectoryIndex index.html    //默认定义的文件名,也可以自定义。
 ​
 如何自定义:
 [root@localhost blogdir]# vim  /etc/httpd/conf/httpd.conf 
 164行:    DirectoryIndex   index.php    index.html     //先访问index.php, 再访问index.html,如果都没有,就会报错。
 [root@localhost blogdir]# systemctl restart httpd

小拓展:访问服务器的时候后面基本要加文件,因为你访问服务器,肯定是要访问服务器里的东西。

 正常格式: 192.168.125.100/文件
 ​
 #如果不加文件,那么默认访问的就是:
 192.168.125.100/index.html      //默认访问

3.12 虚拟主机⭐⭐⭐⭐⭐

用一台机器,搭建出多台机器的效果。只有一条机器,但是让用户认为我有多台机器。

网站的唯一标识:

  • IP相同,但端口不同
  • IP不同,但端口均为默认端口
  • FQDN不同, IP和端口都相同

多虚拟主机有三种实现方案:

  • 基于ip:为每个虚拟主机准备至少一个ip地址
  • 基于port:为每个虚拟主机使用至少一个独立的port
  • 基于FQDN:为每个虚拟主机使用至少一个FQDN,请求报文中首部 Host:www.kgc.com

小拓展:使用子配置文件: vim /etc/httpd/conf.d/*.conf

3.12.1 基于端口

apache默认的监听端口是80

实验3-1:基于端口

 cp  /usr/share/doc/httpd-2.4.6/httpd-vhosts.conf     /etc/httpd/conf.d/     //复制模板文件
 mv   /etc/httpd/conf.d/httpd-vhosts.conf      /etc/httpd/conf.d/vhosts.conf    //改名,名字太长了
 vim  /etc/httpd/conf.d/vhosts.conf      //编辑,修改配置
 <VirtualHost 192.168.125.100:80>
     DocumentRoot "/opt/cxk"
     ServerName www.cxk.com
     ErrorLog "/opt/cxk/log/error-cxk.log"
     CustomLog "/opt/cxk/log/access-cxk.log" common
 </VirtualHost>
 ​
 <VirtualHost 192.168.125.100:9527>
     DocumentRoot "/opt/wyf"
     ServerName www.wyf.com
     ErrorLog "/opt/wyf/log/error-wyf.log"
     CustomLog "/opt/wyf/log/access-wyf.log" common       //最后的common一定不能少!!
 </VirtualHost>
 ​
 <Directory "/opt">      //设置主站点
      Require all granted                        //授权
 </Directory>
 ​
 listen  9527                       //监听端口,是为了后面开启与客户端的通信,因为这个实验是基于端口,下面两个小实验就可以不用加监听端口!
 ​
 cd  /opt
 mkdir  -p {cxk,wyf}/log   //递归建立主站点,及主站点日志的文件夹
 echo cxk > cxk/index.html
 echo wyf > wyf/index.html
 ​
 systemctl  restart  httpd
 ​
 7-3:
 curl  192.168.125.100
 cxk
 curl  192.168.125.100:9527
 wyf

image.png

3.12.2 基于ip地址

实验3-2:基于ip地址

 vim  /etc/httpd/conf.d/vhosts.conf      //编辑
 <VirtualHost 192.168.125.100> 
     DocumentRoot "/opt/cxk"
     ServerName www.cxk.com
     ErrorLog "/opt/cxk/log/error-cxk.log"
     CustomLog "/opt/cxk/log/access-cxk.log" common
 </VirtualHost>
 ​
 <VirtualHost 192.168.125.111>    //新加一个ip地址
     DocumentRoot "/opt/wyf"
     ServerName www.wyf.com
     ErrorLog "/opt/wyf/log/error-wyf.log"
     CustomLog "/opt/wyf/log/access-wyf.log" common
 </VirtualHost>
 ​
 <Directory "/opt">
      Require all granted         //授权
 </Directory>
 ​
 listen  9527
 ​
 ifconfig   ens33:0  192.168.125.111/24    //因为新加了一个ip地址,所以也要加一块网卡。
 systemctl restart httpd
 ​
 ​
 7-3:
 curl 192.168.125.100
 cxk
 curl 192.168.125.111
 wyf

3.12.3 基于域名

实验3-3:基于域名

 vim  /etc/httpd/conf.d/vhosts.conf 
 <VirtualHost 192.168.125.100>
     DocumentRoot "/opt/cxk"
     ServerName www.cxk.com       //设置域名
     ErrorLog "/opt/cxk/log/error-cxk.log"
     CustomLog "/opt/cxk/log/access-cxk.log" common
 </VirtualHost>
 ​
 <VirtualHost 192.168.125.100>
     DocumentRoot "/opt/wyf"
     ServerName www.wyf.com       //设置域名
     ErrorLog "/opt/wyf/log/error-wyf.log"
     CustomLog "/opt/wyf/log/access-wyf.log" common
 </VirtualHost>
 ​
 <Directory "/opt">
      Require all granted
 </Directory>
 ​
 listen  9527
 ​
 ​
 systemctl   restart  httpd
 ​
 ​
 对面服务器设置:
 vim   /etc/hosts          //DNS域名解析
 192.168.125.100  www.cxk.com   www.wyf.com    //可以加在最后面
 curl www.cxk.com
 cxk
 curl www.wyf.com
 wyf

3.13 白名单和黑名单

apache 默认是黑名单

3.13.1 白名单

 <Directory "/data">
   <RequireAny>
   Require all denied            //拒绝所有 
   require ip 192.168.125.10     //但是允许192.168.125.10访问我
   </RequireAny>
 </Directory>

3.13.2 黑名单

 <Directory "/data">
   <RequireAll>
   Require all granted               //允许所有
   require not ip 192.168.125.10     //但是,不允许192.168.125.10访问我
   </RequireAll>
 </Directory>

image.png

// 配置读取顺序是:先读里面的(局部),再读外面的,以外面的为主,所以外面的优先级高!当里外设置冲突时,以外面的为主。

3.14 访问日志

httpd 有两种日志类型

  • 访问日志 access
  • 错误日志 error
 日志存放位置:/var/log/httpd/access_log
 #########日志语法格式:###########
 LogFormat "%h %l %u [%{%F %T}t] "%r" %>s %b "%{Referer}i" "%{User Agent}i""     testlog
 拆解:
     %h   #客户端IP地址
     %l   #远程用户,启用mod_ident才有效,通常为减号"-”
     %u   #验证(basic,digest)远程用户,非登录访问时,为一个减号"-”
     %t   #服务器收到请求时的时间
     %r   #First line of request,即表示请求报文的首行;记录了此次请求的"方法”,"URL”以及协议版本
     %>s  #响应状态码
     %b   #响应报文的大小,单位是字节;不包括响应报文http首部
     %{Referer}i     #请求报文中首部"referer”的值;即从哪个页面中的超链接跳转至当前页面的
     %{User-Agent}i  #请求报文中首部"User-Agent”的值;即发出请求的应用程序
     %{VARNAME}i     #The contents of VARNAME: header line(s) in the request sent to the server

示例:

 192.168.91.101 - - [28/May/2024:11:51:27 +0800] "GET / HTTP/1.1" 200 5 "_" "cur1/7.29.0"     //注意:" "  反斜杠代表转义
 分解:
 %h 对应:192.168.91.101   //客户端ip 谁来访问了我
 %l 对应:-
 %u 对应:-  //显示用户名密码,虚拟用户验证时使用
 %t 对应:[28/May/2024:11:51:27 +0800]    //时间
 %r 对应:请求报文的第一行
 %b 对应:报文的大小
 %{Referer}i        //从哪里过来的,比如:如果直接访问京东,显示的就是京东;如果是从百度跳转到京东,显示的就是百度。
 %{User-Agent}i    //浏览器版本号

3.15 基于用户的访问控制

访问的时候,需要输用户名和登录密码。

httpd-tools软件,是web网页呈现的客户端工具。

 /usr/bin/ab    压力测试工具
 ​
 /usr/bin/htpasswd   生成用户和密码,密码是加密的!
htpasswd选项含义
-c新建,自动创建文件,仅应该在文件不存在时使用
-b非交互方式创建用户,命令后面可以接密码

示例:

 [root@7-1 data]#  htpasswd -htpasswd -c /data/.httpuser  wxj     //新建用户wxj
 New password: 
 Re-type new password: 
 Adding password for user wxj
 [root@7-1 data]#  cat .httpuser
 wxj:$apr1$Whn26bjd$0NpV7OeOWDSCjp6DpvZZl1     //密码是加密的

3.16 状态页

可以看到服务器状态

 [root@localhost data]#httpd  -M |grep status
  status_module (shared)
 ​
 打开配置文件
 ##############修改配置文件#########
 vim /etc/httpd/conf/httpd.conf
 <location "/status">
 sethandler server-status
 </location>
 systemctl restart httpd