1. Apache web服务

访问网站的基本流程(打开一个url之后的过程:)

  • dns查找

    • 访问浏览器缓存
    • 系统缓存
    • 路由器缓存
    • ISP DNS缓存
    • 根域名服务器
    • 顶级域名服务器
    • 主机域名服务器
    • 保存结果至缓存
  • http请求

    • 客户端访问网址服务器,建立tcp连接
    • 客户端发起http请求,连接到服务器80端口
    • 服务器响应客户端请求,发送http响应报文
    • 客户端浏览器完成html解析,结束访问
  • DNS查询

    • 迭代查询
    • 递归查询

2. Http协议(超文本传输协议)

  • HTTP重要应用之一是www服务。涉及HTTP协议最初的目的就是提供一种发布和接受HTML页面的方法。HTTP协议是互联网上最常用的通信协议之一,它有很多的应用,但最流行的就是用于web浏览器和web服务器之间的通信,即www应用或称web应用
  • HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件,图片文件, 查询结果等)的应用层协议
  • HTTP协议工作于C/S或B/S架构。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。 Web服务器根据接收到的请求后,向客户端发送响应信息。

URL/URI

  • URI:统一资源标识符就是在某一个规则下能把一个资源独一无二的标识出来
  • URI:统一资源定位符;一种特殊的URI,用来标识某一处资源的地址

HTTP协议请求和响应过程

http请求报文

  • 请求行

    • 请求方法

      • GET:请求指定的页面信息
      • HEAD:请求资源的相关属性,而非资源本身。使用场景:在下载一个大文件前 先获取其大小再决定是否要下载, 以此可以节约带宽资源.
      • POST:向服务器发送带要处理的数据(包含主体)例如提交表单或者上传文件
      • PUT:将请求报文中的消息体提交给服务器,请求服务器创建一个新的目标资源,或者替换原先的目标资源
      • DELETE:请求服务器删除指定的页面
      • OPTIONS:决定可以在服务器上执行哪些方法,比如说查看服务器的性能
      • TRACE: 对可能经过代理服务器传送到服务器上去的报文进行追踪
    • 请求信息

    • index.html

    • 请求协议

      • HTTP0.9:仅支持GET方法,仅能访问HTML格式的资源
      • HTTP1.0:增加POST和HEAD方法,MIME支持多种数据格式,开始支持Cache,支持 tcp短连接
      • HTTP1.1:支持持久连接(长连接),一个TCP连接允许多个请求,新增PUT、PATCH、 DELETE等
      • HTTP2.0:性能大幅提升,新的二进制格式,多路复用,header压缩,服务端推送。
  • 请求头部

  • 空行

  • 请求主体

    • 使用get方法时没有请求主体
    • 使用POST方法时有请求主体(提交的数据放在里面)

GET方法和POST方法的区别

  • GET方法提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&连接
  • POST方法提交的数据是放在HTTP包的body(请求主体)中
  • GET提交的数据大小有限制(URL长度有限);POST提交的数据没有限制
  • GET方法需要使用Request.QueryString(请求查询字符串)来取得变量值;而POST方法通过Request.Form(申请表)来取得变量值
  • GET方式提交数据会带来安全问题,比如登陆一个页面,通过GET提交数据时,用户名和密码会出现在URL上。

http响应报文

  • 起始行

    • 协议版本
    • 状态码:

      • 200:请求已正常处理完毕
      • 301:请求永久重定向
      • 302:请求临时重定向
      • 304:客户端的请求被重定向到本地缓存中
      • 400:客户端请求出现语法错误
      • 401:客户端请求没有经过授权
      • 403:客户端请求没有权限
      • 404:客户端请求的URL在服务器上不存在
      • 500:服务器发生永久错误
      • 503:服务器发生临时错误
  • 响应头部

  • 空行

  • 响应主体

网站测评指标

  • IP:根据用户访问的源IP信息进行统计

    • 统计一天内访问网站最对的前十个地址
  • PV:根据用户页面访问量进行统计

    • 统计一个用户访问页面数量最对的前十个页面
  • UV:根据用户访问的cookie信息,统计用户访问数量
  • 网站并发:单位时间内同时处理的请求数
  • 对网站进行压力测试
  1. yum install httpd-tools -y
  2. ab -n 100 -c 10 http://ip地址/

3. Apache

  • Apache是什么?

    • Apache HTTP Server简称为Apache,是Apache软件基金会的一个高性能、功能强大、可靠、又灵活的开放源代码的web服务软件,它可以运行在广泛的计算机平台上如Linux、 Windows。因其平台型和很好的安全性而被广泛使用,是互联网最流行的web服务软件之一
  • 特点:

    • 功能强大
    • 高度模块化
    • 采用MPM多路处理模块
    • 配置简单
    • 速度快
    • 应用广发
    • 性能稳定
    • 可做代理服务器或负载均衡
    • 支持第三方模块
  • 应用场合

    • 使用Apache运行静态HTML网页、图片(搭建网站)
    • 使用Apache结合PHP、Linux、MySQL可以组成LAMP经典架构
    • 使用Apache作代理、负载均衡等
  • MPM工作模式

    • prefork:多进程IO模型;主进程创建多个子进程,每个子进程处理一个请求
    • worker:复用多进程IO模型;主进程创建多个子进程,每个子进程创建多个子线程,每个线程处理一个请求
    • event:事件驱动模型;主进程创建多个子进程,每个子进程处理多个请求

搭建第一个网站

  • 安装apache并开启服务
[root@salted ~]# yum install -y httpd

####搭建网页####
[root@salted ~]# vim /var/www/html/index.html
<html>
<head>
    <title>这是有图片的网页</title>
    <meta charset="utf-8"/>
    <style type="text/css">
        #title{
            font-size:20px;
            font-family:"宋体"
        }
        .content {
            font-size:15px;
            color:red
        }
    </style>
</head>
<body>
        <p id="title">日记</p>
        <p class="content">今天我是。。。。</p>
        <p class="content">奥斯卡的几率就爱我的</p>

</body>
[root@salted ~]# systemctl start httpd
  • 关闭防火墙和selinux
[root@salted ~]# systemctl stop firewalld
[root@salted ~]# setenforce 0
  • 查看端口和进程是否打开
[root@salted ~]# ss -taln | grep 80
LISTEN     0      128         :::80                      :::*                  
[root@salted ~]# ps -ef | grep httpd
root      14838      1  0 17:15 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache    14839  14838  0 17:16 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache    14840  14838  0 17:16 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache    14841  14838  0 17:16 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache    14842  14838  0 17:16 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache    14843  14838  0 17:16 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
root      14856  14741  0 17:17 pts/1    00:00:00 grep --color=auto httpd
  • 访问网站
#linux访问
[root@salted ~]# curl 192.168.244.139

[root@salted ~]# wget 192.168.244.139
[root@salted ~]# ls
anaconda-ks.cfg  index.html

#Windows直接访问

相关配置文件

  • 文件说明
/etc/httpd/:主配置文件目录
/etc/httpd/conf/httpd.conf:服务配置文件
/etc/httpd/conf.d/:服务配置目录(模块化)
/etc/httpd/conf.modules.d/:模块配置目录
/etc/sysconfig/httpd:守护进程配置文件
/usr/lib64/httpd/modules/:可用模块
/usr/sbin/:相关命令目录
/var/log/httpd/:日志目录
/var/www/:站点目录
  • 主配置文件
##主配置说明##
[root@node3 ~]# grep "^[^ #]" /etc/httpd/conf/httpd.conf
ServerRoot "/etc/httpd" # 服务器的根
Listen 80 # 监听的端口
Include conf.modules.d/*.conf # 包含模块
User apache # 用户
Group apache # 属组
ServerAdmin root@localhost # 服务器管理员
DocumentRoot "/var/www/html"  #网页
ErrorLog "logs/error_log" # 错误日志
LogLevel warn # 日志等级
EnableSendfile on # 开启
IncludeOptional conf.d/*.conf # 虚拟服务器配置文件
说明:<></>此类称之为容器,针对某个容器做配置
  • 持久连接的配置

    • tcp长连接:

      • tcp通道建立之后,服务端和客户端完成一次数据传输后,通道不会主动关闭,后面的数据传输会继续使用;除非人为或者超时关闭连接
    • tcp短连接:

      • 建立连接——数据传输——关闭连接…建立连接——数据传输——关闭连接
KeepAlive默认是on,时间是5秒。
KeepAliveTimeout # 连接超时
MaxKeepAliveRequests # 最大保持连接请求
[root@node3 conf.d]# cat /etc/httpd/conf.d/keeplive.conf
KeepAlive on
KeepAliveTimeout 30
MaxKeepAliveRequests 100
[root@node3 conf.d]# systemctl restart httpd
  • 修改多路处理模块
[root@node1 ~]# cat /etc/httpd/conf.modules.d/00-mpm.conf | 
grep -Ev "^#|^$"
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
默认参数:
StartServers 5 # 服务启动时的进程数
MaxSpareServers 10 # 最大空闲服务进程数
MinSpareServers 5 # 最小空闲进程数
MaxRequestWorkers 256 # 单个进程最多接受的进程数
[root@node3 conf.d]# ps aux | grep httpd
root 12886 0.4 0.2 221928 4956 ? Ss 11:03 0:00 /usr/sbin/httpd -
DFOREGROUND
apache 12887
DFOREGROUND
0.0 0.1 221928 2992 ? S 11:03 0:00 /usr/sbin/httpd -
apache 12888 0.0 0.1 221928 2992 ? S 11:03 0:00 /usr/sbin/httpd -
DFOREGROUND
apache 12889 0.0 0.1 221928 2992 ? S 11:03 0:00 /usr/sbin/httpd -
DFOREGROUND
apache 12890 0.0 0.1 221928 2992 ? S 11:03 0:00 /usr/sbin/httpd -
DFOREGROUND
apache 12891 0.0 0.1 221928 2992 ? S 11:03 0:00 /usr/sbin/httpd -
DFOREGROUND
#若要使用worker和event工作模型,只需要在/etc/httpd/conf.modules.d/00-mpm.conf中取消对应注释即可

访问控制机制

更改站点根目录

  • 重新定义根目录
#创建新目录
[root@salted ~]# mkdir /data/www/html -p
[root@salted ~]# vi /data/www/html/index.html

# 定义服务器的文档的页面路径:
[root@salted ~]# vi /etc/httpd/conf/httpd.conf

......
DocumentRoot "/data/www/html"
......
# 准备页面
[root@server1 ~]# echo "this path /data/wwww/html" > /data/www/html/index.html

# 重启服务
[root@server1 ~]# systemctl restart httpd
  • 测试访问,发现状态码为403没有权限
[root@server1 conf]# curl 192.168.80.151 -I
HTTP/1.1 403 Forbidden
Date: Mon, 22 Feb 2021 06:19:54 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Thu, 16 Oct 2014 13:20:58 GMT
ETag: "1321-5058a1e728280"
Accept-Ranges: bytes
Content-Length: 4897
Content-Type: text/html; charset=UTF-8
  • 开放相应目录权限
[root@salted ~]# vi /etc/httpd/conf/httpd.conf
<Directory "/data/www/html">
Require all granted
</Directory>

[root@server1 ~]# systemctl restart httpd
  • 成功访问
[root@server1 conf]# curl 192.168.80.151 -I
HTTP/1.1 200 OK
Date: Mon, 22 Feb 2021 06:21:15 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Mon, 22 Feb 2021 06:18:57 GMT
ETag: "1a-5bbe6c6eb43fa"
Accept-Ranges: bytes
Content-Length: 26
Content-Type: text/html; charset=UTF-8
[root@server1 conf]# curl 192.168.80.151
this path /data/wwww/html

更加详细的访问控制配置的参数

Require常见配置参数:
Require all granted  # 全部放行
Require all denied   # 全部拒绝
Require ip IPAd  # 放行某ip地址
Require no ip IP   # 拒绝某ip地址
Require user user1  # 放行某用户
Require group group1   # 放行某组
PS:34参数需要在容器中才可以。
<RequireAll>
Require all granted
Require not ip 10.252.46.165
</RequireAll>

用户访问控制

认证方式有basic和digest两种

  • 创建用户认证文件
[root@salted ~]# htpasswd -c -m /etc/httpd/conf.d/.htpasswd lisi
New password: 
Re-type new password: 
Adding password for user lisi
[root@salted ~]# htpasswd -c -m /etc/httpd/conf.d/.htpasswd zhangsan
New password: 
Re-type new password: 
Adding password for user zhangsan
  • 修改配置文件
[root@server1 ~]# vim /etc/httpd/conf/httpd.conf
<Directory "/data/www/html">
AuthType Basic
AuthName "Restricted Resource"
AuthBasicProvider file
AuthUserFile /etc/httpd/conf.d/.htpassword
Require user lisi
</Directory>
[root@server1 ~]# systemctl restart httpd.service
  • 扩展,认证组文件
通过认证组文件:
<Directory "/data/www/html">
AuthType Basic
AuthName "Restricted Resource"
AuthBasicProvider file
AuthUserFile /etc/httpd/conf.d/.htpassword
AuthGroupFile /etc/httpd/conf.d/.htgroup
Require group group1
</Directory>
使用浏览器访问测试即可!