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

相关推荐
运维帮手大橙子8 分钟前
Linux如何安装使用Rust指南
linux·运维·rust
千百元19 分钟前
centos怎么查看磁盘是机械还是固态
linux·运维·centos
LoneEon21 分钟前
CentOS 7 系统安装教程
linux·运维·centos
2301_7931679922 分钟前
网络基础总结
运维·网络·hcia
ssswywywht34 分钟前
搭建本地时间同步服务器
linux·运维·服务器
广商 小轩1 小时前
自动化实战 Playwright破解滑块验证码的完整实战指南
运维·自动化
你想考研啊1 小时前
自动化部署脚本
linux·服务器·自动化
21号 11 小时前
16.MySQL 服务器配置与管理
服务器·数据库·mysql
Gss7771 小时前
jenkins介绍与部署
运维·jenkins
FJW0208142 小时前
Linux编辑神器——vim工具的使用
linux·运维·vim