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. 接收主程序指令,比如重启、升级和退出等

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UD效果广告

1.定义 全称Unidesk&#xff0c;是由阿里旗下大数据运营平台“阿里妈妈”推出的数字营销引流平台。UD投放将其他媒体的流量通过相关的广告创意导入到天猫店铺。 2.UD投放优化技巧 &#xff08;1&#xff09;不起量排查&#xff1a; 可以从账户问题、计划数量不足、计划设置…

OpenAI 3年前的AI音乐生成项目:Jukebox,效果比SunoAI v3还好

原来OpenAI 3年前就开始搞AI音乐生成了 效果甚至比最近发布的sunoAI v3还要好&#xff0c;难道OpenAI 想把这个隐藏大招练成无人能敌的状态才放出来再一次轰动全球&#xff1f; OpenAI在2019年8月份就推出了他们的一音乐生成模型&#xff1a;Jukebox Jukebox能够根据提供的歌…

消息队列-kafka-服务端处理架构(架构,Topic文件结构,服务端数据的一致性)

服务端处理架构 资料来源于网络 网络线程池&#xff1a; 接受请求&#xff0c;num.network.threads&#xff0c;默认为 3&#xff0c;专门处理客户的发送的请求。 IO 线程池&#xff1a; num.io.threads&#xff0c;默认为 8&#xff0c;专门处理业务请求。也就是它不负责发…

JetBrains TeamCity 身份验证绕过漏洞(CVE-2024-27198)

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

刷题DAY9 | LeetCode 28-实现 strStr() 459-重复的子字符串

28-实现 strStr()&#xff08;easy&#xff09; 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。 思路…

剑指offer--c++--n个骰子的点数

目录 题目&#xff1a; 题目分析&#xff1a; 最后编写代码&#xff1a; 输出结果 题目&#xff1a; 把n个骰子扔在地上&#xff0c;所有骰子朝上一面的点数之和为s。输入n&#xff0c;打印出s的所有可能的值出现的概率。 感谢大佬的帮助&#xff1a;https://www.cnblogs.c…

了解处理器

了解处理器 摘要写在前面1. 计算机简介1.1.计算机发展简史1.2.计算机分类1.3.PC机结构 2.初识处理器2.1.处理器的硬件模型2.2.处理器的编程模型2.3.处理器的分层模型2.4.如何选择处理器 3.指令集体系结构3.1.处理器编程模型3.2.指令集发展历程3.3.指令集分类3.4.汇编语言格式3.…

商业数据增长超88%!小红书热门内容解析,用户“打卡”新玩法

长久以来&#xff0c;“打卡”在社交媒体盛行&#xff0c;频频涌现新风潮&#xff0c;几乎覆盖美食、旅游、美妆等众多热门行业&#xff0c;今天吃了什么、玩了什么、做了什么&#xff1f;大众都喜欢通过打卡来分享。特别是小红书平台&#xff0c;打卡内容热度经久不衰&#xf…

13 丢弃法dropout【李沐动手学深度学习v2笔记】

1. 丢弃法 在层之间加入随机噪音 加入噪音的一些规则 加入噪音后不要改变期望 使用丢弃法 推理中的丢弃法 总结 2. 代码实现 4.6. 暂退法&#xff08;Dropouthttps://zh.d2l.ai/chapter_multilayer-perceptrons/dropout.html 2.1 Dropout import torch from torch import n…

Redis中的单线程高性能原因和其他高级命令

单线程 Redis是单线程吗&#xff1f; Redis的单线程主要是指Redis的网络IO和键值对读写是由一个线程来完成的&#xff0c;这也是 Redis对外提供键值存储的主要流程。但Redis的其他功能&#xff0c;比如持久化、异步删除、 集群数据同步等&#xff0c;其实是由额外的线程执行的…

小米澎湃和华为原生鸿蒙,那个更有发展前景?

小米的澎湃系统暂时不了解&#xff0c;但华为的鸿蒙系统值得一说。 就目前鸿蒙而言&#xff1b;24年初鸿蒙星河版面向开发者开放申请。其底座全线自研&#xff0c;去掉了传统的 Linux 内核以及 AOSP 安卓开放源代码项目等代码&#xff0c;仅支持鸿蒙内核和鸿蒙系统的应用。星河…

【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(一)-向量扩展编程模型

1. 引言 以下是《riscv-v-spec-1.0.pdf》文档的关键内容&#xff1a; 这是一份关于向量扩展的详细技术文档&#xff0c;内容覆盖了向量指令集的多个关键方面&#xff0c;如向量寄存器状态映射、向量指令格式、向量加载和存储操作、向量内存对齐约束、向量内存一致性模型、向量…

我的第②个出海工具站 - 2024年50个出海工具站计划

为了大家更好的使用各种出海工具。我上线了一版 出海工具导航 站点&#xff0c;经常使用的可以收藏下&#xff0c;我文内使用的网站都集成在了这里&#xff0c;非常使用。 随着AIGC的到来&#xff0c;2024年到了海外工具回暖的一年。今年计划上线50款出海工具站计划&#xff0c…

激光炸弹 刷题笔记

前置知识 二维前缀和 子矩阵的和 刷题笔记 {二维前缀和}-CSDN博客 思路 参考二维前缀和 将子矩阵的和 做成动态矩阵 一个个矩阵搜索 符合要求边长 矩阵中的元素和最大值 将x1,y1用i-k,j-k表示即可 x2,y2用i&#xff0c;j表示 代码 #include<iostream> #include<…

MongoDB获评2023年Gartner®云数据库管理系统“领导者”

MongoDB 很荣幸在《2023 年 Gartner 云数据库管理系统 (CDBMS) 魔力象限》报告中被评为领导者。我们相信这一成就让 MongoDB 成为唯一一家连续两年斩获“领导者”称号的纯应用程序数据库服务提供商。 社区及开发者数据平台用户的需求一向是 MongoDB 关注的重点&#xff0c;而这…

tomcat 搭建博客 及破解数据库密码

一 tomcat 搭建博客 &#xff08;一&#xff09;博客安装包 1&#xff0c; 把博客war包 放到 webapps 文件夹下 2&#xff0c;会自动解压 3&#xff0c;做个软连接 方便后续操作 可以注意到 因为war包 是又tomcat 自己解压的 所以属主数组还是 tomcat &#xff08…

基于springboot+vue的多媒体素材库的开发与应用系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

静态时序分析:SDC约束命令set_disable_timing详解

静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html 目录 指定对象列表 指定源、目的引脚 指定恢复 简单使用 写在最后 上一章中&#xff0c;我们学习了如何使用set_case_analysis模式分析命令&#xff0c;它通过指定某个端口或引脚为固定值&…

代码随想录第50天|● 123.买卖股票的最佳时机III ● 188.买卖股票的最佳时机IV

文章目录 ● 123.买卖股票的最佳时机III思路代码一&#xff1a;dp二维数组代码二&#xff1a;四个数存储 ● 188.买卖股票的最佳时机IV思路&#xff1a;代码&#xff1a; ● 123.买卖股票的最佳时机III 思路 dp[i][j]中 i表示第i天&#xff0c;j为 [0 - 4] 五个状态&#xff0…

MathType玩耍指南

ML论文里特别多公式&#xff0c;里面有各种奇奇怪怪符号&#xff0c;怎么打出来呢&#xff1f; 认识这个符号&#xff0c;直接搜索 比如认识上面那个indicator function是个I&#xff0c;有时候是1&#xff0c;那么就搜索mathtype怎么打印双线符号这样的&#xff1b; 不认识…