目录
[1. 核心组件](#1. 核心组件)
[2. 工作流程](#2. 工作流程)
[3. 主要优势](#3. 主要优势)
[4. 典型应用场景](#4. 典型应用场景)
[(1). 用户发起请求](#(1). 用户发起请求)
[(2). DNS解析](#(2). DNS解析)
[(3). 建立TCP连接](#(3). 建立TCP连接)
[(4). 发送HTTP请求](#(4). 发送HTTP请求)
[(5). 服务器处理请求](#(5). 服务器处理请求)
[(6). 服务器返回响应](#(6). 服务器返回响应)
[(7). 浏览器渲染页面](#(7). 浏览器渲染页面)
[(8). 关闭连接](#(8). 关闭连接)
[(1). 安全性](#(1). 安全性)
[(2). 默认端口](#(2). 默认端口)
[(3). 证书机制](#(3). 证书机制)
[(4). 协议层](#(4). 协议层)
[(5). 性能影响](#(5). 性能影响)
[(6). SEO 与浏览器支持](#(6). SEO 与浏览器支持)
[4.编译安装nginx | yum install安装](#4.编译安装nginx | yum install安装)
前言
在当今数字化时代,网站作为信息传递、服务提供和商业活动的重要载体,其稳定性、性能和安全性至关重要。Web服务的核心依赖于强大的服务器软件来处理用户请求、传输数据并保障在线体验。在众多服务器解决方案中,Nginx以其卓越的性能、高并发处理能力、低内存消耗以及灵活的可配置性脱颖而出,成为支撑现代高性能网站和应用的基石。无论是作为高效的HTTP服务器、可靠的反向代理服务器,还是强大的负载均衡器,Nginx都展现出了其不可或缺的价值。本部分将探讨Web服务的基本原理,并重点阐述Nginx在构建高效、稳定网站服务体系中的核心作用与实践。
一、web概念
1.web基本概念
Web 是一个基于 超文本(Hypertext) 和 互联网(Internet) 的信息系统。它允许用户通过 浏览器(Browser) 访问和浏览存储在 Web服务器(Web Server) 上的 网页(Web Page) 。这些网页通过 超链接(Hyperlink) 相互连接,形成一个巨大的信息网络。
2.B/S构架模型
B/S架构(Browser/Server,浏览器/服务器模式)是一种常见的软件系统架构模式。在这种架构中,客户端通过浏览器访问服务器上的应用,主要业务逻辑和数据存储均在服务器端完成。以下是其核心特点与分层结构:
1. 核心组件
- 浏览器层:用户通过浏览器(如Chrome, Firefox)与系统交互,无需安装特定客户端软件。
- 服务器层:处理业务逻辑,接收请求并返回响应(如Web服务器、应用服务器)。
- 数据库层:存储和管理数据(如MySQL, PostgreSQL)。
2. 工作流程
\\text{浏览器请求} \\rightarrow \\text{服务器处理} \\rightarrow \\text{数据库操作} \\rightarrow \\text{响应返回浏览器}
3. 主要优势
- 维护便捷:只需更新服务器端代码,客户端无需升级。
- 跨平台性:浏览器作为标准运行环境,兼容不同操作系统。
- 资源消耗低:客户端无需高性能硬件。
4. 典型应用场景
- 电商网站(如淘宝)
- 在线文档系统(如Google Docs)
- 企业信息管理系统
5.局限性
- 依赖网络质量
- 服务器压力集中
- 浏览器兼容性问题
3.web请求与响应过程
(1). 用户发起请求
用户在浏览器地址栏输入URL(例如 https://www.example.com)并按下回车键,或点击页面上的链接/按钮触发请求。
(2). DNS解析
浏览器首先需要将域名(如 www.example.com)解析为对应的IP地址:
- 浏览器查询本地缓存(如Hosts文件、DNS缓存);
- 若未命中,向本地配置的DNS服务器发送查询请求;
- DNS服务器通过递归查询返回目标服务器的IP地址(如
93.184.216.34)。
(3). 建立TCP连接
浏览器通过IP地址与目标服务器建立TCP连接:
- 三次握手 :
- 客户端发送
SYN包(同步请求); - 服务器回复
SYN-ACK包(确认+同步); - 客户端发送
ACK包(最终确认)。
- 客户端发送
- 若使用HTTPS,还需进行TLS握手以加密通信。
(4). 发送HTTP请求
浏览器构建HTTP请求报文并发送至服务器:
http
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
- 包含请求方法(如
GET、POST)、路径、协议版本、头部字段(如Host、Cookie)和可选的请求体。
(5). 服务器处理请求
服务器接收请求后:
- Web服务器(如Nginx、Apache)解析请求;
- 应用框架(如Django、Express)处理业务逻辑;
- 可能查询数据库、调用外部API或读取文件系统。
(6). 服务器返回响应
服务器生成HTTP响应报文:
http
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1024
<!DOCTYPE html>
<html>...</html>
- 包含状态码(如
200表示成功)、响应头(如Content-Type)和响应体(如HTML内容)。
(7). 浏览器渲染页面
浏览器接收响应后:
- 解析HTML,构建DOM树;
- 加载CSS/JS,生成渲染树;
- 执行JavaScript,渲染最终页面。
(8). 关闭连接
完成数据传输后,通过 四次挥手 关闭TCP连接:
- 客户端发送
FIN包; - 服务器回复
ACK包; - 服务器发送
FIN包; - 客户端回复
ACK包。
关键协议与技术
- HTTP/HTTPS: 应用层协议
- TCP: 传输层协议(可靠传输)
- IP: 网络层协议(路由寻址)
- DNS: 域名解析系统
4.静态资源与动态资源
静态资源
- 定义: 指那些在服务器上存储时内容固定不变,并且当用户请求时可以直接发送给用户的文件。它们的内容在用户访问之前就已经确定,并且通常不会因为用户的请求内容或身份而改变。
- 特点:
- 内容固定: 每次请求返回的内容都相同。
- 可直接传输: 服务器通常不需要进行复杂的处理,可以直接读取文件内容并发送给客户端。
- 易于缓存: 非常适合被浏览器、CDN等缓存,因为内容不变,缓存后可以显著提高访问速度和减轻服务器负担。
- 常见例子:
- HTML文件(不包含服务端动态渲染的部分)
- CSS样式表文件 (
.css) - JavaScript脚本文件 (
.js) - 图片文件 (
.jpg,.png,.gif,.svg等) - 字体文件 (
.woff,.woff2,.ttf等) - 视频文件 (
.mp4,.webm等) - 音频文件 (
.mp3,.wav等) - 静态的文本文件 (
.txt) - PDF文档 (
.pdf) - 压缩包文件 (
.zip,.rar等)
动态资源
- 定义: 指那些在用户请求时,其内容需要由服务器端程序实时生成的资源。生成的内容通常基于用户的请求参数、用户身份、数据库查询结果或其他实时数据。
- 特点:
- 内容动态生成: 每次请求返回的内容可能都不同,取决于请求时的上下文。
- 需要服务器处理: 服务器需要执行程序逻辑(如运行PHP、Python、Node.js脚本,查询数据库,调用API等)来生成响应内容。
- 难以缓存: 因为内容经常变化,通用的缓存策略效果有限,通常需要更复杂的缓存机制(如按用户ID缓存、缓存查询结果等)或只能由浏览器缓存部分内容。
- 常见例子:
- 由服务器端模板引擎(如Jinja2, Thymeleaf, EJS)渲染生成的HTML页面(内容随数据变化)。
- 服务器端API接口返回的JSON或XML数据(例如用户个人信息、商品列表、搜索结果)。
- 实时更新的数据(如股票行情、新闻头条、聊天消息)。
- 需要用户登录才能查看的个性化页面或数据。
- 表单提交后的处理结果页面。
- 由服务器程序动态生成的图像(如验证码图片、图表)。
关键区别总结:
| 特性 | 静态资源 | 动态资源 |
|---|---|---|
| 内容 | 固定不变 | 实时生成,可能每次不同 |
| 存储形式 | 通常是物理文件 | 通常是程序逻辑 + 数据源 |
| 服务器处理 | 简单读取和发送 | 需要执行程序生成内容 |
| 访问速度 | 通常较快(尤其缓存后) | 通常较慢(需要生成过程) |
| 缓存 | 非常容易且高效 | 较难,需要更精细的策略 |
| 更新 | 替换文件即可 | 需要修改程序或数据源 |
| 预先生成 | 可以 | 通常不行(或意义不大) |
简单来说:
- 请求一个图片文件(
.jpg) -> 静态资源。 - 请求一个显示当前登录用户信息的页面 -> 动态资源(服务器需要知道谁在请求)。
- 请求一个固定的公司介绍页面(纯HTML) -> 静态资源。
- 请求一个商品搜索结果的API (
/api/search?keyword=phone) -> 动态资源(服务器需要处理查询参数并查询数据库)。
二、HTTP与HTTP协议
1.http与https区别
HTTP(Hypertext Transfer Protocol)和HTTPS(Hypertext Transfer Protocol Secure)是互联网通信的基础协议,主要区别如下:
(1). 安全性
-
HTTP :
数据以明文传输,容易被窃听或篡改。
\\text{传输内容} \\rightarrow \\text{明文}
-
HTTPS :
通过 TLS/SSL 加密 (如 RSA 或 AES 算法)保护数据:
\\text{传输内容} \\rightarrow \\text{加密密文}
确保数据保密性、完整性和身份认证。
(2). 默认端口
- HTTP 使用端口 80
- HTTPS 使用端口 443
(3). 证书机制
- HTTPS 依赖 数字证书 (由 CA 机构签发),验证服务器身份:
\\text{证书} \\equiv \\text{服务器身份凭证}
浏览器通过证书确认网站真实性(地址栏显示锁标)。
(4). 协议层
- HTTP 位于应用层,直接与 TCP 交互。
- HTTPS 在 HTTP 和 TCP 之间增加 TLS/SSL 安全层 :
\\text{HTTP} \\xrightarrow{\\text{加密}} \\text{TLS/SSL} \\xrightarrow{} \\text{TCP}
(5). 性能影响
- HTTPS 因加密/解密操作需要额外计算资源,但现代硬件优化已大幅降低开销。
- HTTP/2 和 HTTP/3 通常仅支持 HTTPS,显著提升传输效率。
(6). SEO 与浏览器支持
- 搜索引擎(如 Google)优先收录 HTTPS 网站。
- 现代浏览器对 HTTP 页面标记 "不安全" 警告。
使用场景
- HTTP:内网测试、静态信息展示等低敏感场景。
- HTTPS :登录、支付、隐私数据传输等所有公开服务(现代网站强制要求)。
2.HTTPS握手流程
HTTPS握手流程本质上是基于TLS/SSL协议的安全通信建立过程,其核心步骤为:
-
客户端发起请求
客户端向服务器发送
ClientHello消息,包含:- 支持的TLS版本
- 支持的加密套件列表
- 客户端生成的随机数 R_c
-
服务器响应
服务器返回
ServerHello消息,包含:- 选定的TLS版本和加密套件
- 服务器生成的随机数 R_s
- 服务器数字证书(含公钥)
- 可能请求客户端证书(双向认证场景)
-
证书验证
客户端验证服务器证书:
- 检查证书链可信度
- 确保证书未过期
- 验证域名匹配性
-
密钥交换
客户端生成预主密钥 PMS,用服务器公钥加密后发送。双方根据 R_c、R_s、PMS 推导出相同的会话密钥: $$ K = \text{PRF}(PMS, R_c, R_s) $$ 其中PRF为伪随机函数
-
完成握手
双方交换
Finished消息,使用会话密钥加密验证消息完整性,确认握手成功。
3.HTTP状态码
HTTP 状态码是服务器在响应客户端请求时返回的三位数字代码,用于表示请求的处理状态。它们分为五个主要类别:
-
1xx:信息响应
- 表示请求已被接收,服务器正在处理。
- 例如:
100 Continue(继续),101 Switching Protocols(切换协议)。
-
2xx:成功响应
- 表示请求已被服务器成功接收、理解并接受。
- 例如:
200 OK(请求成功),201 Created(已创建),204 No Content(无内容)。
-
3xx:重定向响应
- 表示需要客户端采取进一步操作才能完成请求。
- 例如:
301 Moved Permanently(永久移动),302 Found(临时移动),304 Not Modified(未修改)。
-
4xx:客户端错误
- 表示请求包含语法错误或无法完成。
- 例如:
400 Bad Request(错误请求),401 Unauthorized(未授权),403 Forbidden(禁止),404 Not Found(未找到)。
-
5xx:服务器错误
- 表示服务器在处理请求时失败。
- 例如:
500 Internal Server Error(服务器内部错误),502 Bad Gateway(错误网关),503 Service Unavailable(服务不可用)。
这些状态码有助于客户端(如浏览器)理解请求的结果并做出相应的处理。
三、nginx概念
1.nginx介绍
Nginx 是一个高性能的开源 Web 服务器 和 反向代理服务器 。它以其 高并发处理能力 、低内存消耗 和 稳定性 而闻名,在现代 Web 架构中扮演着至关重要的角色。
2.简述Nginx和Apache的差异
| 特性 | Apache | Nginx |
|---|---|---|
| 架构模型 | 主要采用 多进程/多线程模型 (如 prefork, worker)。每个连接通常需要一个进程或线程处理。 |
采用 事件驱动的异步非阻塞模型。一个工作进程可以高效处理大量并发连接。 |
| 资源消耗 | 高并发时,内存和 CPU 消耗相对较高(尤其是使用 prefork 模式)。 |
高并发下资源(内存、CPU)消耗更低,能处理更多并发连接。 |
| 静态内容 | 能处理,但效率通常不如 Nginx。 | 处理静态内容(如图片、HTML、CSS、JS)速度非常快,效率高。 |
| 动态内容 | 原生支持通过模块(如 mod_php)直接处理 PHP 等动态内容。 |
本身不直接处理动态语言(如 PHP),需将请求代理给后端处理器(如 PHP-FPM)。 |
| 配置 | 主要使用 .htaccess 文件进行分布式目录级配置,灵活但可能影响性能。 |
主要使用集中式配置文件(nginx.conf),不支持 .htaccess,性能更高。 |
| 功能模块 | 历史悠久,模块生态极其丰富,功能扩展性强。 | 核心功能精简高效,模块生态也很丰富,但部分模块需要第三方开发或集成。 |
| 安全 | .htaccess 提供灵活的目录级安全控制。 |
配置集中管理,安全性管理方式不同。 |
| 适用场景 | 适合需要高度灵活配置、直接处理动态内容、使用 .htaccess 的场景。 |
适合高并发、静态内容服务、反向代理、负载均衡、作为前端服务器。 |
总结来说:
- Apache :像一个全能型的管家,功能极其丰富和灵活(尤其通过
.htaccess),擅长直接处理各种动态内容,但面对极高并发时资源消耗较大。 - Nginx:像一个高效率的快递员,架构先进,资源消耗低,处理静态内容和高并发能力非常强,常作为反向代理或负载均衡器,处理动态内容需要配合后端。
3.nginx进程结构
Nginx采用主从式进程模型(master-worker),主要由两种类型的进程组成:
-
Master进程(主进程)
- 以
root权限启动,负责管理Worker进程 - 功能:
- 读取并验证配置文件
- 监听端口(需权限)
- 管理Worker进程(启动/停止/重载)
- 平滑升级(无缝重启)
- 以
-
Worker进程(工作进程)
- 由Master进程派生,以普通用户权限运行
- 功能:
- 实际处理网络请求(HTTP/TCP)
- 多进程并行处理(充分利用多核CPU)
- 相互独立(单进程崩溃不影响整体服务)
\\begin{bmatrix} \\text{Master} \\ \\downarrow \\ \\text{Worker}_1 \\ \\text{Worker}_2 \\ \\vdots \\ \\text{Worker}_n \\end{bmatrix} \\quad n = \\text{CPU核心数}
关键特性
-
热重载
修改配置后,Master向Worker发送
SIGUSR1信号,Worker处理完当前请求后重启加载新配置。 -
进程通信
Worker间通过共享内存(如
ngx_shared_memory)交换数据,例如限流计数器。 -
高效事件模型
每个Worker使用异步I/O(如Linux的
epoll)处理数千并发连接,事件驱动模型为: $$ \text{事件数} \propto \frac{\text{连接数}}{\text{活跃度}} $$
4.编译安装nginx | yum install安装
①关闭防火墙,上传软件包至 /opt
bash
systemctl stop firewalld
systemctl disable firewalld
将 Nginx 安装包(如 nginx-1.24.0.tar.gz)上传到 /opt 目录。
②安装依赖包
bash
yum -y install gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel
③
bash
groupadd www
useradd -M -s /sbin/nologin -g www www
-M: 不创建家目录-s /sbin/nologin: 禁止登录-g www: 指定主组为www
④编译安装 Nginx
解压并进入源码目录
bash
cd /opt
tar -zxvf nginx-*.tar.gz
cd nginx-*/
配置编译选项
bash
./configure \
--prefix=/usr/local/nginx \
--user=www \
--group=www \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-threads
编译并安装
bash
make && make install
⑤管理 Nginx 服务
检查配置文件语法
bash
/usr/local/nginx/sbin/nginx -t
启动服务
bash
/usr/local/nginx/sbin/nginx
重启服务
bash
/usr/local/nginx/sbin/nginx -s reload
停止服务
bash
/usr/local/nginx/sbin/nginx -s stop
验证安装
(1)查看版本:
bash
/usr/local/nginx/sbin/nginx -v
(2)浏览器访问http://服务器IP,出现Nginx欢迎页面即表示成功。

总结
Web服务的发展与优化是一个持续演进的过程,而Nginx凭借其出色的架构设计和技术特性,已成为现代网站部署中不可或缺的关键组件。通过对Nginx的学习和应用,我们深刻理解了其在高并发连接处理、静态资源高效分发、动态请求代理转发以及安全防护等方面的强大能力。合理配置和优化Nginx,能够显著提升网站的响应速度、系统承载能力和整体稳定性,有效应对日益增长的流量压力和安全挑战。掌握Nginx的核心功能与最佳实践,对于构建和维护高性能、高可用的Web服务环境具有极其重要的意义,是每一位网站运维和开发人员必备的技能之一。