01. Nginx入门-Nginx简介

Web基础知识

Web协议通信原理

Web协议通信过程

  1. 浏览器本身是一个客户端,当输入URL后,首先浏览器会请求DNS服务器,通过DNS获取相应的域名对应的IP。
  2. 通过IP地址找到对应的服务器后,监理TCP连接。
  3. 等浏览器发送完HTTP Request(请求)请求后,服务器接收到请求包才会开始处理请求包。
  4. 服务器调用自身的服务,返回HTTP Response(响应)包。
  5. 客户端收到来自服务器的响应后开始渲染这个Response包的主体,等收到全部的内容后断开与服务器直接的TCP连接。

Web协议通信图解

Web服务器工作原理

  1. 客户端通过TCP/IP协议建立到服务器的TCP连接;
  2. 客户端向服务器发送HTTP协议请求包,请求服务器里的资源;
  3. 服务器向客户端发送HTTP协议应答包,如果请求的资源包含有动态语言的内容,那么服务器会调用动态语言的解析引擎负责处理动态内容,并将处理得到的数据返回给客户端;
  4. 客户端与服务器断开,由客户端解释HTML文档,在客户端屏幕上渲染图形结果;

客户端请求到达服务端流程

  1. 当客户端拿到服务端域名对应的IP后,浏览器会以一个随机端口(端口范围:1024<随机端口<65535)向服务器的web程序(nginx、apache)的80端口发起TCP连接请求;
  2. 该请求经过负载的网络环境后到达服务端,进入到服务器的对应网卡,再进入Linux内核的TCP/IP协议栈,一层一层的解开数据包,甚至经过防火墙,最终到达nginx程序,确认TCP/IP连接;
  3. 确认TCP连接之后,客户端继续发起HTTP请求,常见请求有:get、post请求方法。

TCP/IP和HTTP协议

TCP/IP协议

TCP(TCP,Transmission Control Protocol)协议是传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议;TCP协议就是控制数据包再传输过程中的规范格式。
IP(Internet Protocol)就是网际互连协议,是TCP/IP体系中的网络层协议。
设计IP的目的是提高网络的可扩展性:
一是解决互联网问题,实现大规模、异构网络的互联互通;
二是分割顶层网络应用和底层网络技术直接的耦合关系,利于两者独立发展;
TCP/IP协议指的不仅仅是TCP和IP两个协议,TCP/IP协议是由FTP、SMTP、TCP、UDP、IP等各种协议组成的协议簇,只因为TCP和IP协议最具有代表性,因此称为TCP/IP协议

HTTP协议

简介

HTTP(Hyper Text Transfer Protocol)是超文本传输协议的缩写,主要用于服务器传输超文本到本地浏览器的传输协议。
超文本指的是HTML、css、JavaScript和图片等,HTTP的出现是为了接收和发布HTML页面,经过不断地发展也可以用于接收一些音频、视频、文件等内容。

HTTP的基本工作流程
  1. 客户端发送的一个HTTP请求,说明客户端想要访问的资源和请求的动作。
  2. 服务端收到请求之后,服务端开始处理请求,并根据请求做出响应的动作访问服务器资源。
  3. 最后通过发送HTTP响应把结果返回给客户端。
  4. 其中一个请求的开始到一个响应的结束称为事务,当一个事务结束后还会在服务端添加一条日志条目。
包含内容

请求模式、响应模式、报文、端口号、URL、特性、状态码、请求字段。

请求响应模式

HTTP是一个客户端和服务器端请求和应答的标准(客户端是终端用户,服务器端是网站)。
由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认端口80)的TCP连接。HTTP服务器则在那个端口监听客户端的请求,一旦收到请求,服务器会向客户端防火一个状态,比如“ HTTP/1.1 200 OK ”,以及返回的内容,如请求的文件、错误消息、或其他信息。

请求响应报文

客户端发送一个HTTP请求到服务器的请求包含一下格式:请求行(Request Line)、请求头部(Header)、空行和请求数据。
具体格式如下:
image.png

HTTP协议的8中请求类型介绍

HTTP 协议中共定义了八种方法或者叫“动作”来表明对 Request-URI 指定的资源的不同操作方式。

  1. OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送“*”请求来测试服务器的功能性。
  2. HEAD:向服务器索要与GET请求一致的响应,只不过响应体不会被返回。
  3. GET:向特定的资源发出请求。
  4. POST:向指定资源提交数据进行处理请求。数据被包含在请求体中。POST请求可能会导致新资源的创建或已有资源的修改。
  5. PUT:向指定资源位置上传其最新内容。
  6. DELETE:请求服务器删除Request-URI所表示的资源。
  7. TRACE:回显服务器收到的请求,主要用于测试或诊断。
  8. CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

虽然 HTTP 的请求方式有 8 种,但是我们在实际应用中常用的也就是 get 和 post,其他请求方式也都可以通过这两种方式间接的来实现。

状态码分类

HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。

分类分类描述
1**信息,服务器收到请求,需要请求者继续执行操作
2**成功,操作被成功接收并处理
3**重定向,需要进一步的操作完成请求
4**客户端错误,请求包含语法错误或无法完成请求
5**服务器错误,服务器在处理请求的过程中发生了错误
常见状态码

200:请求成功
301:资源(网页等)被永久转移到其他URL
302:资源(网页等)被临时转移到其他URL,以后客户端继续使用原URL
305:必须使用代理访问
400:语法错误,服务器无法理解
401:要求身份认证
403:拒绝,服务器理解需求但是拒绝执行
404:请求的资源(网页等)不存在
405:客户端请求中的方法被禁止
500:内部服务器错误
502:作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应
503:由于临时的服务器维护或者过载,服务器当前无法处理请求
504:作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器

URI简介

什么是URI?

URI(Uniform Resource Identifier)是统一资源标识符。
HTTP请求的内容通称为“资源”。每个资源都由一个URI进行表示。
而URL是统一资源定位符,他是URI的一种。

什么是URL?

URL(Uniform Resource Locator)是统一资源定位符,也称为网页网址。
URL的组成:

  1. 示例:http://www.example.com:80/path/to/myfile.html?key1=value1&key2=value2#SomewhereInTheDocument
  2. 协议:“http://”告诉浏览器使用什么协议访问。
  3. 主机:“www.example.com”即域名,域名分一级域名如:www.example.com;二级域名如:example.com;三级域名如:wang.ming.example.com。此处是二级域名。
  4. 端口:“80”主机使用的访问端口。
  5. 路径:“/path/to/myfile.html”是web服务器上资源的路径。
  6. 查询:“key1=value1&key2=value2”是提供给web服务器的额外参数,使用“&”作为分隔符分割键值对。
  7. 片段:“SomewhereInTheDocument”是资源本身的一部分的一个锚点。

OSI七层模型

image.png

TCP/IP的握手与挥手

抓包分析三次握手

图解三次握手流程

抓包分析四次挥手

套接字socket学习

Nginx简介

什么是Nginx

Nginx是一个高性能的web和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。
Nginx支持高并发,内存占用小;
Nginx支持配置文件动态修改;

Nginx是如何工作的

Nginx进程

  1. nginx 在启动后,会以 daemon 的方式在后台运行,后台进程包含一个 master 进程和多个 worker 进程,worker 进程以非 root 用户运行,可以在配置文件中配置运行 worker 进程的用户。
  2. master 进程主要用来管理 worker 进程,包含:接收来自外界的信号,向各 worker 进程发送信号,监控 worker 进程的运行状态,当 worker 进程退出后(异常情况下),会自动重新启动新的 worker 进程。
  3. worker 进程则是处理基本的网络事件。多个 worker 进程之间是对等的,他们同等竞争来自客户端的请求,各进程相互之间是独立的。一个请求,只可能在一个 worker 进程中处理,一个 worker 进程,不可能处理其它进程的请求。

主进程

主进程(master process)的功能:

  1. 读取 Nginx 配置文件并验证其有效性和正确性
  2. 按照配置启动、管理和关闭工作进程
  3. 接受外界指令,比如重启、升级及关闭服务器等指令
  4. 不中断服务,实现平滑升级,重启服务并应用新的配置
  5. 开启日志文件

工作进程

工作进程(woker process)的功能:

  1. 接收处理客户端的请求
  2. 将请求以此送入各个功能模块进行处理
  3. IO 调用,获取响应数据
  4. 与后端服务器通信,接收后端服务器的处理结果
  5. 缓存数据,访问缓存索引,查询和调用缓存数据
  6. 发送请求结果,响应客户端的请求
  7. 接收主程序指令,比如重启、升级和退出等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/431482.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

redis10 应用问题(穿透、击穿、雪崩、分布式锁)

思维草图 缓存穿透 查询不存在的数据&#xff0c;穿透redis缓存&#xff0c;请求直接攻击后端db。 问题 当系统中引入redis缓存后&#xff0c;一个请求进来后&#xff0c;会先从redis缓存中查询&#xff0c;缓存有就直接返回&#xff08;相当于一道隔离闸&#xff0c;保护db…

【打工日常】使用docker部署轻量的运维监控工具

一、Uptime-Kuma介绍 Uptime-Kuma是一个轻量级的自动化运维监控工具&#xff0c;最为引人注目的特点是其出色的监控Dashboard面板。部署简单&#xff0c;工具轻量又强大。而且&#xff0c;Uptime-Kuma是开源免费的&#xff0c;并支持基于Docker的部署方式。它支持网站、容器、数…

【李沐论文精读】Resnet精读

论文地址&#xff1a;Deep Residual Learning for Image Recognition 参考&#xff1a;撑起计算机视觉半边天的ResNet【论文精读】、ResNet论文逐段精读【论文精读】、【李沐论文精读系列】 一、导论 深度神经网络的优点&#xff1a;可以加很多层把网络变得特别深&#xff0c;然…

Java进阶-测试方法

来学习一下软件测试相关的方法&#xff0c;了解一下黑盒测试和白盒测试&#xff0c;以及后面要用到的JUnit单元测试。JUnit单元测试也属于白盒测试&#xff0c;这次内容较少且相对简单。 一、软件测试方法 1、黑盒测试 不需要写代码&#xff0c;给输入值&#xff0c;看程序…

打家劫舍(java版)

&#x1f4d1;前言 本文主要是【动态规划】——打家劫舍(java版)的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每日一…

RT-DETR改进最新LSKNet结构:顶会ICCV2023|原创改进遥感旋转目标检测SOTA!大选择性卷积核的领域首次探索

&#x1f4a1;本篇内容&#xff1a;RT-DETR改进最新LSKNet结构&#xff1a;顶会ICCV2023&#xff5c;原创改进遥感旋转目标检测SOTA&#xff01;大选择性卷积核的领域首次探索 &#x1f4a1;&#x1f680;&#x1f680;&#x1f680;本博客 RT-DETR 遥感旋转目标检测SOTA&…

GIS之深度学习10:运行Faster RCNN算法

&#xff08;未完成&#xff0c;待补充&#xff09; 获取Faster RCNN源码&#xff08;开源的很多&#xff09; 替换自己的数据集&#xff08;图片标签文件&#xff09; 打开终端&#xff0c;进入gpupytorch环境 运行voc_annotation.py文件生成与训练文件 E:\DeepLearningMode…

万物皆可模块化分解

引言 为何要模块化&#xff0c;这里的主体是人&#xff0c;客体是事物。当事物很小时&#xff0c;人可以很轻松的解决&#xff1b;但是当事物远大于人能处理的范围时&#xff0c;我们就可以考虑对它进行模块化分解。模块化是一种解决复杂问题的方式&#xff0c;放之四海而皆可…

SPI总线知识总结

1 SPI的时钟极性CPOL和时钟相位CPHA的设置 1.1 SPI数据传输位数 SPI传输数据过程中总是先发送或接收高字节数据&#xff0c;每个时钟周期接收器或发送器左移一位数据。对于小于16位的数据&#xff0c;在发送前必须左对齐&#xff0c;如果接收的数据小于16位&#xff0c;则采用软…

C++基于多设计模式下的同步异步日志系统day7(终)

C基于多设计模式下的同步&异步日志系统day7&#xff08;终&#xff09; &#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;C基于多设计模式下的同步&异步日志系统 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#…

CAN总线位时序的介绍

CAN控制器根据两根线上的电位差来判断总线电平。总线电平分为显性电平和隐性电平&#xff0c;二者必居其一。发送方通过使总线电平发生变化&#xff0c;将消息发送给接收方。 显性电平对应逻辑 0&#xff0c;CAN_H 和 CAN_L 之差为 2.5V 左右。而隐性电平对应逻辑 1&#xff0c…

深入理解现代JavaScript:从语言特性到应用实践

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 JavaScript作为一门动态、解释性脚本语言&…

前端面试题 ===> 【JavaScript - 高级】

公众号&#xff1a;需要以下pdf&#xff0c;关注下方 2023已经过完了&#xff0c;让我们来把今年的面试题统计号&#xff0c;来备战今年的金三银四&#xff01;所以&#xff0c;不管你是社招还是校招&#xff0c;下面这份前端面试工程师高频面试题&#xff0c;请收好。 JavaScr…

步进电机驱动器接法

实物 参数 共阳极&#xff1a; 使能给高电平有效 共阴极&#xff1a; 使能给低电平有效 整体接线 参考内容 B站UP范辉

基于Java SSM springboot+VUE+redis实现的前后端分类版网上商城项目

基于Java SSM springbootVUEredis实现的前后端分类版网上商城项目 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐…

深入理解Lambda表达式:基础概念与实战演练【第114篇—python:Lambda表达式】

深入理解Lambda表达式&#xff1a;基础概念与实战演练 在现代编程语言中&#xff0c;Lambda表达式作为一种轻量级的匿名函数形式&#xff0c;越来越受到程序员的青睐。特别是在函数式编程兴起的今天&#xff0c;Lambda表达式在简化代码、提高可读性方面发挥着重要作用。本文将…

【Web】浅浅地聊JDBC java.sql.Driver的SPI后门

目录 SPI定义 SPI核心方法和类 最简单的SPIdemo演示 回顾JCBC基本流程 为什么JDBC要有SPI JDBC java.sql.Driver后门利用与验证 SPI定义 SPI&#xff1a; Service Provider Interface 官方定义&#xff1a; 直译过来是服务提供者接口&#xff0c;学名为服务发现机制 它通…

加油站“变身”快充站,探讨充电新模式

摘要&#xff1a;新能源汽车规模化发展的同时&#xff0c;充电不便利的痛点愈发明显。在未来的新能源汽车行业发展当中&#xff0c;充电的矛盾要远远大于造车的矛盾&#xff0c;解决好充电的问题成为电动汽车行业发展的一个突出问题。解决充电补能问题&#xff0c;重要的方式之…

【牛客】VL60 使用握手信号实现跨时钟域数据传输

题目描述 分别编写一个数据发送模块和一个数据接收模块&#xff0c;模块的时钟信号分别为clk_a&#xff0c;clk_b。两个时钟的频率不相同。数据发送模块循环发送0-7&#xff0c;在每个数据传输完成之后&#xff0c;间隔5个时钟&#xff0c;发送下一个数据。请在两个模块之间添加…

(vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)

(vue)el-checkbox 实现展示区分 label 和 value&#xff08;展示值与选中获取值需不同&#xff09; 后端数据 解决方法 在 el-checkbox 标签中间传入要展示的文本即可&#xff0c;代码如下&#xff1a; <el-checkbox-groupv-model"formInline.processFieldList"…