Linux系统中的Web服务器部署及优化

用户常用关于web的信息

什么是****www

  • www是world wide web的缩写,及万维网,也就是全球信息广播的意思
  • 通常说的上网就是使用www来查询用户所需要的信息。
  • www可以结合文字、图形、影像以及声音等多媒体,超链接的方式将信息以Internet传递到世界各处去。
  • 当你连接www网站,该网站会提供一些数据,客户端要使用可以解析这些数据的软件来处理,那就是浏览器

网址

  • URI:Uniform Resource Identifier统一资源标识,分为URL和URN
  • URN:Uniform Resource Naming,统一资源命名,P2P下载使用的磁力链接是URN的一种实现
  • URL:Uniform Resorce Locator,统一资源定位符用于描述某服务器某特定资源位置
  • 两者区别:而URL提供查找该事物的方法。URN仅用于命名,而不指定地址

URL 组成

URL组成结构如下:

<scheme>://<user>:<password>@<host>:<port>/<path>:<params>?<query>#<frag>

每部分的定义为:

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

HTTP简介

什么是 http

  • HTTP协议:全称为Hyper Text Transfer Protocol(超文本传输协议

  • 简单来说 http 就是从服务器传输超文本(html)到本地浏览器的传输协议

  • HTTP协议工作于B/S架构上,浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务端发送请求(Request)Web服务端根据接收到的请求数据后,向客户端发送响应信息(Response)

  • https://developer.mozilla.org/zh-CN/docs/Web

http****工作机制

一次 http 事务包括 :

  • http请求:http request
  • http响应: http response

Web资源: web resource

一个网页由多个资源(文件)构成,打开一个页面,通常会有多个资源展示出来,但是每个资源都要单独请求。因此,一个"Web页面"通常并不是单个资源,而是一组资源的集合

资源类型 :

  • 静态文件:无需服务端做出额外处理,服务器端和客户端的文件内容相同
  • 常见文件后缀:.html,.txt,.jpg,.js,.css,mp3,avi
  • 动态文件:服务端执行程序,返回执行的结果,服务器端和客户端的文件内容不相同
  • 常见文件后缀:.php,jsp,asp
web****中常用的语言介绍

html语言:超文本标记语言

<html>

<head>

<meta http-equiv = Content-Type content = "text/html; charset = utf-8">

<title>HTML语言</title>

</head>

<body>

<img src = "http://www.xianoupeng.com/uploadfile/2019/0424/20190424115929686.jpg">

<h1 style = "color:red">欢迎</h1>

<p><a href = http://www.xianoupeng.com>个人blog</a>欢迎你</p>

</body>

</html>

css:层叠样式表 表述网站的风格

html网页主体


<html>

<head>

<meta http-equiv = Content-Type content = "text/htm1;charset=utf-8">

<link rel = "stylesheet" type = "text/css" href = "mystyle.css" />

</head>

<body>

<h1>这是 heading 1</h1>

<p>这是一段普通的段落。请注意,该段落的文本是红色的。在body选择器中定义了本页面中的默认文本颜色。</p>

<p class = "ex">该段落定义了class = "ex"。该段落中的文本是蓝色的。</p>

</body>

</html>

css文件

--

body {color : red }

h1 {color : yellow }

p.ex {color : blue }

js:实现html和css实现不了的功能比如动画效果

<!DOCTYPE html>

<html>

<head>

<meta http-equiv = Content-Type content = "text/html; charset = utf-8">

</head>

<body>

<h2>我的第一个JavaScript</h2>

<button type = "button"

onclick = "document.getElementById('demo').innerHTML = Date()">

点击这里来显示日期和时间

</button>

<p id = "demo"></p>

</body>

</html>

mine**(Multipurpose Internet Mail Extensions)多用途因特网邮件扩展**
  • 它设计的最初目的是为了在发送电子邮件时附加多媒体数据,让邮件客户程序能根据其类型进行处理
  • 为了支持多媒体数据类型,HTTP协议中就使用了附加在文档之前的MIME数据类型信息来标识数据类型。
  • 其主要功能是让服务器将它们发送的多媒体数据的类型告诉浏览器
  • 服务器将MIME标志符放入传送的数据中来告诉浏览器使用哪种插件读取相关文件
  • MIME类型存在于HTTP响应报文的响应头部信息里,它是一种文本标记
  • MIME格式: type/subtype 文件类型后缀(html txt jpg png... ...)

|------------------------|-------------------------|
| MIME类型 | 文件类型 |
| text/html | html 、 htm 、 shtml 文本类型 |
| text/css | css 文本类型 |
| text/xml | xml 文本类型 |
| image/gif | gif 图像类型 |
| image/jpeg | jpeg 、 jpg 图像类型 |
| application/javascript | js 文本类型 |
| text/plain | txt 文本类型 |
| application/json | json 文本类型 |
| video/mp4 | mp4 视频类型 |
| video/quicktime | mov 视频类型 |
| video/x-flv | flv 视频类型 |
| video/x-ms-wmv | wmv 视频类型 |
| video/x-msvideo | avi 视频类 |

http****访问请求完整过程

1.建立连接:

TCP 的 3 次握手建立链接,向服务器发送 http 请求,服务器拒绝或允许

2.接受请求:

接受客户端请求报文对某个资源的一次请求过程 web 响应访问模型

a).单进程I/O模型:启动一个进程处理用户请求,而且一次只处理一个,多个请求被串行响应

b).多进程I/O模型:并行启动多个进程,每个进程响应一个连接请求

c).复用I/O结构:启动一个进程,同时响应N个连接请求

d).复用的多进程I/O模型:启动M个进程,每个进程响应N个连接请求,同时接收M*N个请求

3.处理请求:

服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选的主体部分对请求进行处理常用请求Method: GET(获取)、POST(提交)、HEAD(请求首部)、PUT(上传)、DELETE(删除)、TRACE(追踪)、OPTIONS(选择)

4.访问资源:

服务器获取请求报文中请求的资源 web 服务器,即存放了 web 资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源

5.构建响应报文:

一旦 Web 服务器识别除了资源,就执行请求方法中描述的动作,并返回响应报文。响应报文中包含有响应状态码、响应首部,如果生成了响应主体的话,还包括响应主体
响应实体 : 如果事务处理产生了响应主体,就将内容放在响应报文中回送过去。响应报文中通常包括 :
描述了响应主体 MIME 类型的 Content-Type 首部
描述了响应主体长度的 Content-Length
实际报文的主体内容
2)URL重定向 :web 服务构建的响应并非客户端请求的资源,而是资源另外一个访问路径
3)MIME类型 :Web 服务器要负责确定响应主体的 MIME 类型。多种配置服务器的方法可将 MIME 类型与资源管理起来

6.发送响应报文

Web 服务器通过连接发送数据时也会面临与接收数据一样的问题。服务器可能有很多条到各个客户端的连接,有些是空闲的,有些在向服务器发送数据,还有一些在向客户端回送响应数据。服务器要记录连接的状态,还要特别注意对持久连接的处理。对非持久连接而言,服务器应该在发送了整条报文之后,关闭自己这一端的连接。对持久连接来说,连接可能仍保持打开状态,在这种情况下,服务器要正确地计算Content-Length首部,不然客户端就无法知道响应什么时候结束

4、http 协议报文头部结构

(一)、请求报文

请求报文由三部分组成:开始行(请求行)、首部行、实体主体

  • 开始行:请求方法 url 版本 CRLF
  • 首部行:通常用键值表示
  • 空格(URL)
  • 实体主体数据:一般在post动作中可以提看到

开始行中的请求方法:

|---------|------------------------------------------|
| 方法 | 描述 |
| GET | 请求指定页面信息,并返回实体主体 |
| HEAD | 类似 get 要求,只不过返回相应中没有主题内容,用户获取报头 |
| POST | 向指定资源提交数据请求,数据包含在请求中,此请求可能会生成新的资源或修改已有资源 |
| PUT | 从客户端向服务端传送数据取代指定的文档内容 |
| DELETE | 请求服务器删除指定页面 |
| CONNECT | HTTP/1.1 协议中预留给弄够将改为管道方式的代理服务器 |
| OPTIONS | 允许客户端查看服务器的性能 |
| TRACE | 回显服务器收到的请求,用于测试和诊断 |

(二)、响应报文

响应报文由三部分组成即:开始行(状态行)、首部行、实体主体

  • 开始行:http版本 状态码 短语(解释状态码) CRLF
  • 首部行:通常用键值表示
  • 空格(状态码)
  • 实体主体数据,即获取内容

5、状态代码

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

|-----|--------|------------------|
| 状态码 | 含义 | 详解 |
| 1xx | 指示信息 | 表示请求已接收,继续处理 |
| 2xx | 成功 | 表示请求已被成功接收、理解、接受 |
| 3xx | 重定向 | 要完成请求必须进行更进一步的操作 |
| 4xx | 客户端错误 | 请求有语法错误或请求无法实现 |
| 5xx | 服务器端错误 | 服务器未能实现合法的请求 |

常见状态代码、状态描述的说明如下:

|--------------------------|-------------------------------------------|
| 状态码 | 含义 |
| 200 OK | 客户端请求成功 |
| 400 Bad Request | 客户端请求有语法错误,不能被服务器所理解 |
| 401 Unauthorized | 请求未经授权,这个状态代码必须和 WWW-Authenticate 报头域一起使用 |
| 403 Forbidden | 服务器收到请求,但是拒绝提供服务 |
| 404 Not Found | 请求资源不存在,举个例子:输入了错误的 URL |
| 500 Internal Server Erro | 服务器发生不可预期的错误 |
| 503 Server Unavailable | 服务器当前不能处理客户端的请求,一段时间后可能恢复正常 |

三、web 服务的配置详解

1、web 服务的常用种类

  • Apache
  • Nginx
  • openresty
  • 大厂自研

2、Nginx 的安装

1、前置条件(配置软件仓库)
复制代码
mkdir /rhel9
mount /dev/sr0 /rhel9/
df
vim /etc/rc.d/rc.local 
复制代码
chmod +x /etc/rc.d/rc.local
cd /etc/yum.repos.d/
vim rhel9.repo
2、安装并运行 Nginx
复制代码
dnf install nginx -y                               ### 安装web服务nginx
systemctl enable --now nginx                       ### 启动nginx
firewall-cmd --permanent --add-service=http        ### 火墙放行
firewall-cmd --reload
firewall-cmd --list-all                            ### list查看是否是http
cd /usr/share/nginx/html/                          ### nginx默认共享的目录
echo timinglee > index.html                        ### 输入timinglee进入index.html
netstat -antlupe |grep nginx                       ### 可以查看到web服务默认使用端口为80端口
cat /proc/cpuinfo                                  ### 查看cpu的数量
ps aux | grep nginx                                ### 查看aux进程,nginx的cup数量
3、修改端口

vim /etc/nginx/nginx.conf ### 配置网页文件

初始为

修改为:

nginx -s reload ### 刷新网页

更改端口后无法访问服务器

需要防火墙放行:

之后就可以正常访问了

4、修改发布文件

vim test.html ### 修改发布文件内容

vim /etc/nginx/nginx.conf

nginx -t ### 检测语法是否正确

nginx -s reload ### 刷新网页

5、修改默认发布目录

mkdir /usr/share/nginx/timinglee ### 创建新的发布目录

echo hahahahahahahaa > /usr/share/nginx/timinglee/index.html ### 修改发布文件信息

vim /etc/nginx/nginx.conf

nginx -s reload ### 刷新

6、创建独立网址

mkdir lee

echo lee > lee/index.htm

vim /etc/nginx/nginx.conf ### 读取有顺序,先读取的不能被后面的覆盖

运行结果:

7、基于用户操作访问认证

dnf install httpd-tools -y ### 建立文件

ll /etc/nginx/.htpasswd ### 查看有无建立文件

htpasswd -cm /etc/nginx/.htpasswd admin ### 建立网址用户

htpasswd -m /etc/nginx/.htpasswd lee ### -cm 会覆盖文件的用户,所以用 -m

cat /etc/nginx/.htpasswd 运行结果:

vim /etc/nginx/nginx.conf ### 配置让网站需要密码访问

nginx -t 运行结果

nginx -s reload ### 刷新内容

curl 172.25.254.200/lee/

curl -u lee:lee 172.25.254.200/lee/

8、发布默认测试页

cd /usr/share/nginx/html/

ip a a 172.25.254.10/24 dev eth0 ### 添加字ip地址

ip a a 172.25.254.20/24 dev eth0

ip a 查看配置

mkdir /usr/share/nginx/virtualhost/{bbs,news} -p

echo 172.25.254.20 > /usr/share/nginx/virtualhost/bbs/index.html

echo 172.25.254.10 > /usr/share/nginx/virtualhost/news/index.html

cd /etc/nginx/conf.d/

ls ### 确定目录下没有文件

vim vhosts.conf

9、创建基于域名的虚拟主机

vim vhosts.conf ### 配置域名

mkdir /usr/share/nginx/virtualhost/hah a/ -p

echo haha > /usr/share/nginx/virtualhost/haha/index.html

vim vhosts.conf ### 添加网址

nginx -s reload

# vim /etc/hosts ### 配置子网页

# cat /etc/hosts

相关推荐
风行無痕1 小时前
Ubuntu Linux系统配置账号无密码sudo
linux·服务器·ubuntu
爆农2 小时前
centos搭建dokcer和vulhub
linux·运维·centos
SZ1701102312 小时前
中继器的作用
服务器·网络·智能路由器
chenxy022 小时前
如何快速分享服务器上的文件
运维·服务器
重启就好3 小时前
【Ansible】模块详解
linux·服务器·ansible
o0o_-_3 小时前
【瞎折腾/mi50 32G/ubuntu】mi50显卡ubuntu运行大模型开坑(三)安装风扇并且控制转速
linux·运维·ubuntu
SuperW4 小时前
Linxu实验五——NFS服务器
运维·服务器
promise5244 小时前
JVM之jcmd命令详解
java·linux·运维·服务器·jvm·bash·jcmd
Bruce_Liuxiaowei4 小时前
Day 5:Warp高级定制与自动化
运维·warp
溜达的大象4 小时前
docker创建一个centOS容器安装软件(以宝塔为例)的详细步骤
运维·docker·容器