admin 管理员组

文章数量: 887007

目录

一、web服务器简介

1、什么是www

2、网址及HTTP简介

3、http协议请求的工作过程:

二、web服务器的类型

1、仅提供用户浏览的单向静态网页

2、提供用户互动接口的动态网站

三、web服务器基本配置

四、虚拟主机配置实战

1、搭建静态网站--基于http协议的静态网站

实验1:搭建一个web服务器,访问该服务器时显示“hello world”欢迎界面 。

实验2:建立两个基于ip地址访问的网站,要求如下:

实验3:建立两个基于不同端口访问的网站,要求如下:

实验4:建立两个基于域名访问的网站,要求如下:

实验5:基于虚拟目录和用户控制的web网站


一、web服务器简介

1、什么是www

www world wide web 的缩写,也就是全球信息广播的意思。通常说的上网就是使用 www 来查询用户 所需要的信息。www 可以结合文字、图形、影像以及声音等多媒体,并通过可以让鼠标单击超链接的方 式将信息以Internet 传递到世界各处去。 与其他服务器类似,当你连接上 www 网站,该网站肯定会提供一些数据,而你的客户端则必须要使用可 以解析这些数据的软件来处理,那就是浏览器。 www 服务器与客户端浏览器之间的连接图: (1)   www 所用的协议: 浏览器怎样向 web 服务器请求数据以及服务器怎样把文档传送给浏览器呢?这就是由http 协议来定义的,( Hyper Text Transport Protocol HTTP ,超文本传输协议)。 (2) www 服务器需要提供可让客户端浏览的平台。目前最主流的 Web 服务器是 Apache Microsoft 的Internet信息服务器( Internet Information Services IIS )和 unix nginx (3) 服务器所提供的最主要数据是超文本标记语言( Hyper Text Markup Language HTML )、多媒体文件(图片、影像、声音、文字等,都属于多媒体或称为超媒体),HTML 只是一些纯文本数据,通过所谓的标记来规范所要显示的数据格式。 (4) 客户端收到服务器的数据之后需要软件解析服务器所提供的数据,最后将效果呈现在用户的屏幕上。那么著名的浏览器就有内建在Windows 操作系统内的 IE 浏览器了,还有 Firefox 浏览器和 Google 的chrome浏览器。

2、网址及HTTP简介

web 服务器提供的这些数据大部分都是文件,那么我们需要在服务器端先将数据文件写好,并且放置在某个特殊的目录下面,这个目录就是我们整个网站的首页,在nginx 中,这个目录默认 在/usr/share/nginx/html/ 。浏览器是通过你在地址栏中输入你所需要的网址来取得这个目录的数据 的。 (1)URL Uniform Resource Locator,统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。 (2)网址格式: < 协议 >://< 主机或主机名 >[:port]/< 目录资源 , 路径 >                [1] 浏览器常支持的协议有:http、 https ftp 等。                [2]主机地址或者主机名:主机地址就是服务器在因特网所在的IP地址。如果是主机名的话,那么就需要域名解析了。                [3]端口号(port): http 80 https 443 IANA :互联网数字分配机构)                          0-1023 :众所周知,永久地分配给固定的应用程序使用,特权端口(只有管理员有权限 启用并让进程监听) 1024-41951 :亦为注册端口,但要求不是特别严格,分配给程序注册为某应用使用: 3306/TCP 41952-60000 :客户端程序随机使用的端口,动态端口,或私有端口 (3)http 请求方法:在 http 通信中,每个 http 请求报文都包含一个方法,用以告诉 web 服务器端需要执行哪些具体的动作,这些动作包括:获取指定web 页面、提交内容到服务器、删除服务器上资源文件等。

 (4)状态代码:由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。

  1xx :指示信息 —— 表示请求已接收,继续处理   2xx :成功 —— 表示请求已被成功接收、理解、接受   3xx :重定向 —— 要完成请求必须进行更进一步的操作   4xx :客户端错误 —— 请求有语法错误或请求无法实现   5xx :服务器端错误 —— 服务器未能实现合法的请求 常见状态代码、状态描述的说明如下:   200 OK :客户端请求成功   400 Bad Request :客户端请求有语法错误,不能被服务器所理解   401 Unauthorized :请求未经授权,这个状态代码必须和 WWW-Authenticate 报头域一起使用   403 Forbidden :服务器收到请求,但是拒绝提供服务   404 Not Found :请求资源不存在,举个例子:输入了错误的 URL   500 Internal Server Error :服务器发生不可预期的错误   503 Server Unavailable :服务器当前不能处理客户端的请求,一段时间后可能恢复正常 (5) HTTP 报文: http 报文中有很多行内容,这些行的字段内容都是由一些 ASCII 码串组成,但各个字段 的长度是不同的。 http 报文可分为两种,一种是从 web 客户端发往 web 服务器的 http 报文,称为请 求报文。另外一种是从 web 服务器发往 web 客户端的报文,称为响应报文 。 [1]http 请求报文由请求行、请求头部、空行和请求报文主体几个部分组成:
  1. 请求行:包括请求方法(如GET、POST)、请求URI和HTTP版本号。例如,GET /index.html HTTP/1.1
  2. 请求头部:包含若干个属性,格式为“属性名: 属性值”,提供客户端环境信息、请求体的大小、客户端支持的压缩类型等。常见的请求头包括Host、User-Agent、Accept、Accept-Encoding、Content-Length等。
  3. 空行:请求头和请求体之间的分隔符,表示请求头的结束。
  4. 请求体:在某些类型的HTTP
[2]http 响应报文由起始行、响应头部、空行和响应报文主体这几个部分组成:
  1. 起始行:包含协议版本、状态码和原因短语。例如,HTTP/1.1 200 OK
  2. 响应头部:包含服务器的基本信息以及数据的描述信息,使用key-value形式。例如,Content-Type: text/html表示返回的内容类型为HTML。
  3. 空行:用于分隔响应头和响应体,表示响应头的结束。
  4. 响应体:实际传输的数据,可以是文本、图片、视频等二进制数据

3、http协议请求的工作过程:

  1. 地址解析:客户端需要通过域名系统(DNS)将URL中的域名解析为对应的IP地址。例如,访问http://www.baidu时,DNS服务器会将该域名解析为对应的IP地址。

  2. 建立TCP连接:客户端与服务器之间需要建立TCP连接。这通常涉及“三次握手”过程,确保双方能够进行可靠的数据传输。

  3. 发送HTTP请求:客户端通过已建立的TCP连接向服务器发送HTTP请求报文。请求报文包括请求方法(如GET、POST)、请求的URL、协议版本以及可选的头部字段和主体内容。

  4. 服务器处理请求:服务器接收到请求后,会根据请求的内容进行处理。这可能包括查找资源、执行程序或生成响应数据等。

  5. 返回HTTP响应:服务器处理完请求后,会向客户端返回HTTP响应报文。响应报文包括状态行(包含协议版本、状态码和原因短语)、响应头部字段以及可选的响应体内容。

  6. 浏览器解析响应:客户端(通常是Web浏览器)接收到服务器的响应后,会根据响应状态码和响应内容进行解析和展示。如果状态码表示成功(如200 OK),则展示响应体中的内容;否则,显示错误信息。

  7. 关闭连接:在默认情况下,HTTP是无状态且短连接的,即每个请求完成后都会关闭TCP连接。不过,为了提高效率,也可以使用Keep-Alive头来保持连接,以便后续请求复用同一连接。

二、web服务器的类型

1、仅提供用户浏览的单向静态网页

单纯是由服务器单向提供数据给客户端, Server 不需要与 client 端有互动,所以你可以到该网站上去浏览,但是无法进行数据的上传。

2、提供用户互动接口的动态网站

这种类型的网站可以让服务器与用户互动,常见的例如留言板,博客。这种类型的网站需要通过 网页程序语言” 来实现与用户互动的行为。常见的例如: PHP 网页程序语言,配合数据库系统来进行数据的读、写。当你在向服务器请求数据时,其实是通过服务器端同一个网页程序在负责将数据读出或写入数据库,变动的是数据库的内容,网页程序并没有任何改变。 另外一种交互式的动态网页主要是在客户端实现。服务端将可执行的程序代码( JavaScript )传送给客户 端,客户端的浏览器如果提供 JavaScript 的功能,那么该程序就可以在客户端的计算机上面工作了;另外一种可在客户端执行的就是flash 动画格式,在这种动画格式内还可以进行程序设计。

搭建动态网站的需求通常包括以下几个方面:

  1. 服务器环境:需要一台或多台服务器来托管网站,服务器上需要安装操作系统(如Linux、Windows Server等)和Web服务器软件(如Apache、Nginx、IIS等)。
  2. 数据库支持:动态网站通常需要与数据库进行交互,因此需要安装数据库管理系统(如MySQL、PostgreSQL、Oracle、SQL Server等),并配置好数据库。
  3. 编程语言支持:需要选择一种或多种编程语言来编写网站的后端逻辑,常见的有PHP、Python、Java、Ruby、Node.js等。
  4. 框架和库:为了提高开发效率和代码质量,通常会使用一些Web开发框架和库,如Django(Python)、Spring(Java)、Laravel(PHP)、Express(Node.js)等。
  5. 前端技术:虽然动态网站主要依赖于后端技术,但也需要一些前端技术来构建用户界面,如HTML、CSS、JavaScript以及前端框架(如React、Vue.js、Angular等)。
  6. 安全性需求:需要考虑网站的安全性,包括数据加密、身份验证、权限控制、防止SQL注入、跨站脚本攻击(XSS)等。
  7. 性能优化:需要对网站进行性能优化,以提高响应速度和并发处理能力,如使用缓存、负载均衡、CDN等技术。
  8. 版本控制:为了管理代码和协作开发,需要使用版本控制系统(如Git、SVN等)来管理代码库。
  9. 部署和发布:需要一套自动化的部署和发布流程,以便快速将新功能或修复部署到生产环境中。
  10. 监控和维护:需要对网站进行实时监控,及时发现和解决问题,并进行定期维护和更新。

三、web服务器基本配置

服务器端:此处使用 nginx 提供 web 服务, RPM 包获取: http://nginx/packages/
#安装nginx软件包:
[root@server ~]# yum install nginx -y

#显示nginx的版本信息:
[root@server ~]# nginx -v

#显示Nginx的详细配置信息,包括编译时使用的所有参数和模块:
[root@server ~]# nginx -V

#显示nginx的用法和选项:
[root@server ~]# nginx -help
用法:nginx [-?hvVtTq] [-s信号][-p前缀]
[-e文件名][-c文件名][-g指令]

选项:
- - - - - - ?,-h:这有帮助
-v:显示版本并退出
-V:显示版本并配置选项,然后退出
-t:测试配置并退出
-T:测试配置,转储并退出
-q:在配置测试时抑制非错误信息
-s signal:向主进程发送信号:停止,退出,重新打开,重新加载
-p prefix:设置前缀路径(默认:/usr/share/nginx/)
-e文件名:设置错误日志文件(默认:/var/log/nginx/error.log)
-c filename:设置配置文件(默认:/etc/nginx/nginx.conf)
-g directives:将全局指令从配置文件中设置出来


#列出nginx中的所有文件:
[root@server ~]# rpm -ql nginx

#以树状图显示nginx配置文件目录:
[root@server ~]# tree /etc/nginx/
/etc/nginx/
├── conf.d            #子配置文件目录
├── default.d            
├── fastcgi.conf
├── fastcgi.conf.default
├── fastcgi_params            #用以翻译nginx的变量供php识别
├── fastcgi_params.default
├── koi-utf
├── koi-win
├── mime.types               #用以配置支持的媒体文件类型
├── mime.types.default
├── nginx.conf            #主配置文件
├── nginx.conf.default
├── scgi_params
├── scgi_params.default
├── uwsgi_params        #用以配置nginx的变量供python识别
├── uwsgi_params.default
└── win-utf

#以树状图显示nginx默认的网站根目录(通常包含静态网页文件)
[root@server ~]# tree /usr/share/nginx/html/

#以树状图显示nginx日志目录(通常包含访问日志和错误日志)
[root@server ~]# tree /var/log/nginx

#搜索匹配nginx的主配置文件中不以#开头的行(即非注释行)
[root@server ~]# grep ^[^#]  /etc/nginx/nginx.conf
#关闭防火墙并且立即生效:
[root@server ~]# systemctl disable firewalld --now

#将SELinux设置为宽容模式,并检查SELinux的状态:
[root@server ~]# setenforce 0
[root@server ~]# getenforce
Permissive

#重启nginx进程:
[root@server ~]# systemctl restart nginx

curl:这是一个命令行进行数据传输的工具,支持多种协议包括http、https、ftp等等
#获取HTTP响应的头部信息:
[root@server ~]# curl -I localhost
HTTP/1.1 200 OK                    #表示使用的HTTP协议版本
Server: nginx/1.20.1               #服务器软件的名称和版本。这里显示的是Nginx 1.20.1
Date: Thu, 24 Oct 2024 08:34:17 GMT 
Content-Type: text/html            #返回内容的MIME类型。这里表示返回的内容是HTML文档
Content-Length: 2713881            #返回内容的长度(以字节为单位)。这里表示返回的HTML文档大小为2,713,881字节。
Last-Modified: Tue, 04 Jun 2024 22:57:12 GMT
Connection: keep-alive             #连接管理方式。这里表示保持连接打开
ETag: "665f9bc8-296919"            #实体标签,用于缓存验证。ETag是一个唯一标识符,用于判断资源是否被修改
Accept-Ranges: bytes                #指示服务器是否接受范围请求。这里表示服务器接受按字节范围请求,允许客户端请求部分内容

四、虚拟主机配置实战

1、搭建静态网站--基于http协议的静态网站

实验1:搭建一个web服务器,访问该服务器时显示“hello world”欢迎界面 。


#输出字符串"hello world"到标准输出,重定向操作符,将标准输出的内容写入到Nginx服务器的默认网页文件index.html中:
[root@server ~]# echo "hello world" > /usr/share/nginx/html/index.html

#使用curl工具向本地主机(即运行在当前机器上的Web服务器)发送HTTP请求:
[root@server ~]# curl localhost
hello world

#使用curl工具向IP地址为192.168.88.5的服务器发送HTTP请求:
[root@server ~]# curl 192.168.88.5
hello world

 实验成功!!!

实验2:建立两个基于ip地址访问的网站,要求如下:

该网站 ip 地址的主机位为 100 ,设置首页目录为 /www/ip/100 ,网页内容为: this is 100 该网站 ip 地址主机位为 200 ,设置首页目录为 /www/ip/200 ,网页内容为: this is 200

nmtui:这是NetworkManager的命令行文本用户界面(TUI)。它提供了一个基于文本的界面来管理网络连接。运行这个命令会启动一个交互式的菜单,允许您配置和管理网络连接。

nmcli:这是NetworkManager的命令行接口工具。它允许您通过命令行与NetworkManager进行交互。

#进入图形界面更改网络连接:
[root@server ~]# nmtui

#激活名为ens160的网络连接:
[root@server ~]# nmcli connection up ens160
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)

#显示所有网络接口的信息,包括IP地址、MAC地址等:
[root@server ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:37:d2:d7 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.88.5/24 brd 192.168.88.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet 192.168.88.100/24 brd 192.168.88.255 scope global secondary noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet 192.168.88.200/24 brd 192.168.88.255 scope global secondary noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe37:d2d7/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

 

#递归创建目录,并且显示每一个被创建的目录:
[root@server ~]# mkdir -pv /www/ip/{1,2}00
mkdir: created directory '/www'
mkdir: created directory '/www/ip'
mkdir: created directory '/www/ip/100'
mkdir: created directory '/www/ip/200'

#将内容写入到指定文件中:
[root@server ~]# echo this is 100 > /www/ip/100/index.html
[root@server ~]# echo this is 200 > /www/ip/200/index.html

#更改SELinux设置:
[root@server ~]# setenforce 0
[root@server ~]# getenforce
Permissive

#编辑nginx配置文件下的ip测试文件:
[root@server ~]# vim /etc/nginx/conf.d/test_ip.conf

server {

        listen 192.168.88.100:80;
        root /www/ip/100;
        location / {
        }
}
server {

        listen 192.168.88.200:80;
        root /www/ip/200;
        location / {
        }
}

#重启nginx服务:
[root@server ~]# systemctl restart nginx

#使用curl向配置文件中写入的IP地址发送HTTP请求:
[root@server ~]# curl 192.168.88.100
this is 100
[root@server ~]# curl 192.168.88.200
this is 200

实验成功!!!

实验3:建立两个基于不同端口访问的网站,要求如下:

建立一个使用 web 服务器默认端口的网站,设置网站首页目录为 /www/port/80 ,网页内容为: the port is 80 建立一个使用 10000 端口的网站,设置网站首页目录为 /www/port/10000 ,网页内容为: the port is 10000

#递归创建目录,并且显示每一个被创建的目录:
[root@server ~]# mkdir -pv /www/port/{80,10000}
mkdir: created directory '/www/port'
mkdir: created directory '/www/port/80'
mkdir: created directory '/www/port/10000'

#创建对应的网页文件并写入内容:
[root@server ~]# echo this port is 80 > /www/port/80/index.html
[root@server ~]# echo this port is 10000 > /www/port/10000/index.html

#进入图形界面更改网络连接,并且激活网络:
[root@server ~]# nmtui
[root@server ~]# nmcli connection up ens160
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)

#编辑nginx的配置文件:
[root@server ~]# vim /etc/nginx/conf.d/test_port.conf
server {
        listen 192.168.88.120:80;
        root /www/port/80;
        location / {
        }
}
server {
        listen 192.168.88.120:10000;
        root /www/port/10000;
        location / {
        }
}

#重启nginx服务:
[root@server ~]# systemctl restart nginx

#向指定端口的IP地址进行HTTP的请求测试:
[root@server ~]# curl 192.168.88.120
this port is 80
[root@server ~]# curl 192.168.88.120:80
this port is 80
[root@server ~]# curl 192.168.88.120:10000
this port is 10000

实验成功!!!

实验4:建立两个基于域名访问的网站,要求如下:

新建一个网站,域名为 www.ceshi ,设置网站首页目录为 /www/name ,网页内容为 this is test 新建一个网站,域名为 rhce.first.day ,同时可通过 ce.first.day 访问,设置网站首页目录 /www/ce, 网页内容为: today is first day of class 基于域名的网站,需要用到域名解析。 域名 ------->ip 地址 浏览器如何通过域名去查询 URL 对应的 IP (对应服务器地址): 1 、浏览器缓存:浏览器会按照一定的频率缓存 DNS 记录。 2 、操作系统缓存:如果浏览器缓存中找不到需要的 DNS 记录,那就去操作系统中的 hosts 文件 找。 hosts 是一个没有扩展名的系统文件,其作用就是将一些常用的网址域名与其对应的 IP 地址建 立一个关联 " 数据库 " ,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从 Hosts 件中寻找对应的 IP 地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址 提交 DNS 域名解析服务器进行 IP 地址的解析。 windows 下的 hosts 文件路径: C:\Windows\System32\drivers\etc\hosts Linux 下的 hosts 文件路径 :/etc/hosts 3 、路由缓存:路由器也有 DNS 缓存。 4 ISP DNS 服务器: ISP 是互联网服务提供商 (Internet Service Provider) 的简称, ISP 有专门的 DNS 服务器应对 DNS 查询请求。 5 、根服务器: ISP DNS 服务器还找不到的话,它就会向根服务器发出请求,进行递归查询 DNS 服务器先问根域名服务器 域名服务器的 IP 地址,然后再问 域名服务器,依次类 推)

#进入图形界面更改网络连接,并且激活网络:
[root@server ~]# nmtui
[root@server ~]# nmcli connection up ens160
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)

#以递归的方式创建文件,并且显示被创建的文件:
[root@server ~]# mkdir -pv /www/{name,ce}
mkdir: created directory '/www/name'
mkdir: created directory '/www/ce'

#向指定文件写入内容:
[root@server ~]# echo this is a test > /www/name/index.html
[root@server ~]# echo today is first day of class > /www/ce/index.html

#编辑nginx网页配置文件:
[root@server ~]# vim /etc/nginx/conf.d/test_servername.conf

server {
        listen 192.168.88.130:80;
        server_name www.ceshi;  #server_name 指令用于指定该服务器块处理的域名
        root /www/name;
        location / {
        }
}
server {
        listen 192.168.88.130:80;
        server_name rhce.first.day ce.first.day;
        root /www/ce;
        location / {
        }
}


[root@server ~]# vim /etc/hosts
192.168.88.130  www.ceshi rhce.first.day ce.first.day

#更改SELinux状态,并且检查其状态:
[root@server ~]# setenforce 0
[root@server ~]# getenforce
Permissive

使用curl进行测试:
[root@server ~]# curl www.ceshi
this is a test
[root@server ~]# curl rhce.first.day
today is first day of class
[root@server ~]# curl ce.first.day
today is first day of class

测试成功!!!

实验5:基于虚拟目录和用户控制的web网站

#进入图形界面更改网络连接,并且激活网络:
[root@server ~]# nmtui
[root@server ~]# nmcli connection up ens160
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)

[root@server ~]# mkdir /www/real/
[root@server ~]# echo real_virtual > /www/real/index.html
[root@server ~]# systemctl restart nginx
[root@server ~]# vim /etc/nginx/conf.d/test_virtualdir.conf
server {
        listen 192.168.88.140:80;
        root /usr/share/nginx/html;
        location /real {    #指令用于定义如何处理特定的 URL 路径。在这个例子中,它定义了对路径 /real 的处理方式
                alias /www/real;    #alias 指令将指定的路径映射到另一个文件系统路径。在这个例子中,当客户端请求 /real 路径时,Nginx 会将其映射到 /www/real 目录
                auth_basic on;    #auth_basic 指令启用基本认证(Basic Authentication)。这意味着访问该路径需要用户名和密码。
                auth_basic_user_file /etc/nginx/conf.d/auth-password;    #auth_basic_user_file 指令指定存储用户名和密码的文件
        }
}

#使用yum安装httpd-tools包
[root@server ~]# yum install httpd-tools -y

htpasswd:生成或更新HTTP基本认证密码文件的工具

#添加一个新用户,并且创建一个密码文件从命令行中读取密码:
[root@server ~]# htpasswd -cb /etc/nginx/conf.d/auth-password user1 123
Adding password for user user1
[root@server ~]# systemctl restart nginx
[root@server ~]# curl 192.168.88.140
hello world
[root@server ~]# curl 192.168.88.140/real/
<html>
<head><title>401 Authorization Required</title></head>
<body>
<center><h1>401 Authorization Required</h1></center>
<hr><center>nginx/1.20.1</center>
</body>
</html>
[root@server ~]# curl 192.168.88.140/real/ -u user1
Enter host password for user 'user1':
real_virtual

2、搭建静态网站--基于https协议的静态网站

1https简介

  超文本传输协议 HTTP 协议被用于在 Web 浏览器和网站服务器之间传递信息。 HTTP 协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web 浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP 协议不适合传输一些敏感信息,比如信用卡号、密码等。为了解决 HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议 HTTPS 。 HTTPS(全称: Hyper Text Transfer Protocol over Secure Socket Layer Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的 HTTP 通道。 HTTPS并不是一个新协议, 而是 HTTP+SSL TLS )。原本 HTTP 先和 TCP (假定传输层是 TCP 协议)直接通信,而加了 SSL 后,就变 HTTP 先和 SSL 通信,再由 SSL TCP 通信,相当于 SSL 被嵌在了 HTTP TCP 之间。

  SSL “Secure Sockets Layer” 的缩写,中文叫做 安全套接层 。它是在上世纪 90 年代中期,由网景公司设计的。到了1999 年, SSL 应用广泛,已经成为互联网上的事实标准。 IETF 就把 SSL 标准化。标准化之后SSL 被改为 TLS Transport Layer Security 传输层安全协议)。 SSL 协议分为两层:         [1]SSL记录协议 ( SSL Record Protocol ):它建立在可靠的传输协议(如 TCP )之上,为高层协议提供数据封装、压缩、加密等基本功能。         [2]SSL握手协议( SSL Handshake Protocol ):它建立在 SSL 记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。 SSL 协议提供的服务:         1)认证用户和服务器,确保数据发送到正确的客户机和服务器         2)加密数据以防止数据中途被窃取         3)维护数据的完整性,确保数据在传输过程中不被改变

2https协议加密所使用的算法

   HASH 是把任意长度的输入(又叫做预映射 pre-image )通过散列算法变换成固定长度的输出,该输出就是散列值。Hash 算法特别的地方在于它是一种单向算法,用户可以通过 hash 算法对目标信息生成一段特定长度的唯一hash 值,却不能通过这个 hash 值重新获得目标信息。因此 Hash 算法常用在不可还原的密码存储、信息完整性校验等。 常见的 HASH 算法: MD2 MD4 MD5 HAVAL SHA SHA-1 HMAC HMAC-MD5 、 HMACSHA1。 共享密钥加密(对称密钥加密):加密和解密使用相同密钥。 对称加密算法: DES 3DES DESX Blowfish IDEA RC4 RC5 RC6 AES

公开密钥加密是一种使用一对非对称密钥的加密方式,其中一个是私有密钥(只有持有者知道),另一个是公开密钥(可以公开给任何人)。在这种方式中,发送方使用接收方的公开密钥来加密信息,而接收方则使用自己的私有密钥来解密。这种方法的优点在于不需要传输用于解密的私有密钥,从而降低了被窃取的风险。

常见的非对称加密算法包括RSA、ECC(常用于移动设备)、Diffie-Hellman、El Gamal和DSA(主要用于数字签名)。然而,由于公开密钥加密比共享密钥加密要慢,因此通常将两者结合使用。例如,HTTPS协议在交换密钥阶段使用公开密钥加密,而在之后的通信过程中使用共享密钥加密。

为了确保收到的公开密钥确实是预期服务器发布的,需要第三方公证单位的帮助。CA(证书颁发机构)就是一个公认的公证单位。用户可以自行生成密钥对并向CA注册,以获得一个证书。当客户端浏览器访问网站时,它会向CA确认该证书是否合法。如果证书合法,连接才会建立;否则,浏览器会发出警告,提示用户避免建立连接。这样一来,WWW服务器不仅拥有公证单位的证书,用户在建立连接时也更加安全。

3)浏览器访问https网站的通信过程

      [1]建立连接:
  • 客户端(通常是浏览器)向服务器的443端口发起请求,建立TCP连接。

        [2]SSL/TLS握手:

  • 客户端向服务器发送“ClientHello”消息,其中包含支持的加密算法、随机数和会话信息等。
  • 服务器收到后,回复“ServerHello”消息,选择双方共同支持的加密算法、随机数和会话信息等。
  • 服务器将自己的数字证书发送给客户端,证书中包含了服务器的公钥、证书颁发机构的信息等。
  • 客户端验证数字证书的真实性和有效性。如果证书没有问题,客户端生成一个随机数,并使用服务器的公钥对随机数进行加密。
  • 客户端将加密后的随机数发送给服务器。
  • 服务器用自己的私钥解密得到随机数,然后基于这个随机数生成会话密钥。

        [3]安全数据传输:

  • 握手完成后,客户端和服务器之间的通信将使用会话密钥进行加密和解密。数据在传输过程中通过对称加密算法(如AES)进行加密,确保在网络上传输的数据是加密的。
  • 客户端发送经过加密的HTTP请求给服务器。
  • 服务器接收到请求后,用会话密钥解密数据,处理请求并生成响应。
  • 服务器将响应通过会话密钥加密后发送给客户端。

        [4]断开连接:HTTPS连接可以是持久连接,也可以在每次请求/响应后关闭。客户端和服务器可以选择在通信结束后终止SSL/TLS会话,释放资源。

(4)HTTPS的安全通信工作流程可大致分为三个阶段:

        [1]认证服务器:

  • 浏览器内置了一个受信任的CA机构列表和这些CA机构的证书。
  • 服务器提供经CA机构认证的服务器证书。
  • 如果该证书由受信任的CA机构颁发且信息与访问的网站一致,则浏览器认为服务器可信,并从证书中获取服务器公钥用于后续流程。否则,浏览器会提示用户决定是否继续。
  • 用户可以管理受信任的CA机构列表,添加或移除信任的CA机构。

        [2]协商会话密钥:

  • 客户端在认证完服务器并获得服务器公钥后,利用该公钥与服务器进行加密通信,协商出两个会话密钥:一个用于加密客户端到服务器的数据,另一个用于加密服务器到客户端的数据。
  • 使用对称加密(会话密钥)而非非对称加密,是因为对称加密计算资源消耗较低。
  • 会话密钥是随机生成的,每次协商结果不同,安全性较高。

        [3]加密通讯:

  • 客户端和服务器都有了本次通讯的会话密钥,之后传输的所有HTTP数据都通过会话密钥加密。
  • 这确保了数据的私密性和完整性,防止其他用户窃取或篡改传输的数据。

(5)https网站配置

 

#启动 NetworkManager 图形界面工具:
[root@server certs]# nmtui
[root@server certs]# nmcli connection up ens160
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)

#禁用并立即停止firewalld服务:
[root@server ~]# systemctl disable firewalld --now

#将SElinux模式设置为宽松:
[root@server ~]# setenforce 0
[root@server ~]# getenforce
Permissive

#创建相关的目录以及文件:
[root@server ~]# mkdir -pv /www/https/
mkdir: created directory '/www/https/'
[root@server ~]# echo https > /www/https/index.html
[root@server ~]# cd /etc/pki/tls/certs/

#生成一个私钥文件:
[root@server certs]# openssl genrsa -out https.key

#生成一个自签名证书:
[root@server certs]# openssl req -utf8 -new -key https.key -x509 -days 100 -out https.crt

#编辑nginx的配置文件:
[root@server certs]# vim /etc/nginx/conf.d/test_https.conf
server {    #定义一个新的服务器块。Nginx 使用这种结构来组织和管理不同的虚拟主机(Virtual Host)
        listen 192.168.88.150:443 ssl; #指定服务器监听的 IP 地址和端口。在这里,服务器监听 192.168.88.150 的 443 端口,并且启用了 SSL(HTTPS)
        root /www/https;  #指令设置服务器的根目录。当客户端请求一个文件时,Nginx 会从这个目录中查找文件
        ssl_certificate /etc/pki/tls/certs/https.crt;  #指令指定 SSL 证书文件的位置
        ssl_certificate_key /etc/pki/tls/certs/https.key;  #指令指定 SSL 私钥文件的位置
        location / {    #指令用于定义如何处理特定的 URL 路径
        }
}

#重启nginx服务:
[root@server certs]# systemctl restart nginx

#命令发送一个不验证服务器证书的 HTTPS 请求,并输出响应内容:
[root@server certs]# curl --insecure https://192.168.88.150
https

#使用 curl 命令发送一个忽略服务器证书验证的 HTTPS 请求,并输出响应内容:
[root@server certs]# curl -k  https://192.168.88.150
https

 3、搭建动态网站:

  动态网站并不是指具有动画功能的网站,而是指网站内容可根据不同情况动态变更的网站,一般情况下动态网站通过数据库进行架构。 动态网站除了要设计网页外,还要通过数据库和编程序来使网站具有更多自动的和高级的功能。   动态网页:使用网页脚本语言,比如 php JSP 等,通过脚本将网站内容动态存储到数据库,用户访问网站是通过读取数据库来动态生成网页的方法。

 

#启动 NetworkManager 图形界面工具:
[root@server certs]# nmtui
[root@server certs]# nmcli connection up ens160
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)

#安装 PHP 和 PHP-FPM:
[root@server certs]# yum install php php-fpm -y

#重启 Nginx 和 PHP-FPM 服务:
[root@server ~]# systemctl restart nginx php-fpm

#创建一个包含 PHP 信息的 PHP 文件:
[root@server ~]#  echo "<?php phpinfo(); ?>" >/usr/share/nginx/html/index.php

#通过 curl 命令访问服务器:
[root@server ~]# curl 192.168.88.160

在浏览器中测试:

测试成功!!! 

本文标签: 服务器 RHCE WEB