文章目录
- [第一章 Web与Nginx网站服务](#第一章 Web与Nginx网站服务)
-
- [1、Web 概念](#1、Web 概念)
- [2、HTTP 与 HTTPS 协议](#2、HTTP 与 HTTPS 协议)
-
- [2.1 HTTP 与 HTTPS 区别](#2.1 HTTP 与 HTTPS 区别)
- [2.2 HTTPS 握手流程](#2.2 HTTPS 握手流程)
- [2.3 HTTP 状态码](#2.3 HTTP 状态码)
-
- [2.3.1 HTTP 状态码概览](#2.3.1 HTTP 状态码概览)
- [2.3.2 常用状态码详解](#2.3.2 常用状态码详解)
-
- [2xx 成功(请求处理正常)](#2xx 成功(请求处理正常))
- [3xx 重定向(需进一步操作)](#3xx 重定向(需进一步操作))
- [4xx 客户端错误(请求本身有问题)](#4xx 客户端错误(请求本身有问题))
- [5xx 服务器错误(服务器处理失败)](#5xx 服务器错误(服务器处理失败))
- [生活中的 HTTP 状态码类比](#生活中的 HTTP 状态码类比)
- [3、Nginx 概念](#3、Nginx 概念)
-
- [3.1 Nginx 介绍](#3.1 Nginx 介绍)
-
- [Nginx 相关地址](#Nginx 相关地址)
- [3.2 Nginx 与 Apache 的差异](#3.2 Nginx 与 Apache 的差异)
- [3.3 Nginx 进程结构](#3.3 Nginx 进程结构)
-
- 进程功能说明
- [补充:Web 服务器请求处理机制对比](#补充:Web 服务器请求处理机制对比)
- [4、Nginx 安装](#4、Nginx 安装)
- [5、Nginx 配置](#5、Nginx 配置)
-
- [5.1 全局配置](#5.1 全局配置)
- [5.2 I/O 事件配置](#5.2 I/O 事件配置)
- [5.3 HTTP 配置](#5.3 HTTP 配置)
- 总结
- 核心价值
第一章 Web与Nginx网站服务
1、Web 概念
1.1 Web 的基本概念
Web(World Wide Web,万维网)是运行在互联网之上的一个 超文本信息系统 ,它依赖于 HTTP/HTTPS 协议 实现浏览器与服务器之间的交互。

特点
- 分布式:资源分布在世界各地的服务器上。
- 跨平台:只要有浏览器,就能访问资源。
- 无状态:每次 HTTP 请求都是独立的,服务器不会记住客户端状态(除非使用 Cookie/Session)。
1.2 B/S 架构模型
Web 采用 B/S 架构(Browser/Server):
- Browser(浏览器):用户的入口,发送请求、渲染页面。
- Server(服务器):接收请求,返回所需资源或动态内容。

图 1-1:B/S 架构示意图
用户浏览器 ──> Web服务器(Nginx/Apache)
│
└─> 应用服务器(PHP/Python/Java)
│
└─> 数据库(MySQL/Redis)
1.3 Web 请求与响应过程
一次完整的 Web 访问过程包括以下步骤:
- 输入 URL :用户在浏览器输入
http://www.example.com
。 - DNS 解析:浏览器将域名解析为 IP 地址。
- 建立连接:浏览器与 Web 服务器建立 TCP 连接(3 次握手)。
- 发送请求:浏览器发起 HTTP 请求(GET/POST)。
- 服务器处理 :
- Web 服务器处理静态资源请求
- 动态请求转发到应用服务器(如 Tomcat、Django)
- 应用服务器可能再查询数据库
- 返回响应:Web 服务器将结果打包成 HTTP 响应报文返回浏览器。
- 渲染页面:浏览器解析 HTML、加载 CSS/JS、渲染最终页面。
图 1-2:Web 请求-响应流程
浏览器 ----> Web服务器 ----> 应用服务器 ----> 数据库
<---- <---- <----
1.4 静态资源与动态资源
-
静态资源:不需要服务器额外处理,直接返回即可。
- 类型:HTML、CSS、图片、视频、JS 文件
- 优点:速度快,压力小
-
动态资源:需要服务器端代码计算生成,再返回客户端。
- 类型:PHP 脚本、Python Flask/Django、Java Servlet、Ruby
- 优点:个性化内容,支持交互

图 1-3 静态与动态资源对比图
静态资源:用户请求 → Web服务器直接返回
动态资源:用户请求 → Web服务器 → 应用服务器运行代码 → 返回结果
1.5 Web 的发展阶段
- Web 1.0(只读):静态页面为主,用户只能浏览。
- Web 2.0(交互式):用户可生成内容,AJAX(前端) 技术普及。
- Web 3.0(智能化):语义网、区块链、去中心化概念兴起。
1.6 实验:搭建最小 Web 服务
注意:后面安装 Nginx 之后再创建一个静态页面
实验目标
体验一次最简单的 Web 请求与响应过程,结合 Wireshark 抓包分析。
实验步骤
-
创建一个静态页面:
html<!-- index.html --> <html> <head><title>My First Web</title></head> <body> <h1>Hello Web!</h1> <p>This is my first web page.</p> </body> </html>
-
HTML 文档结构解析:
html<!-- index.html --> <html(标签)> <head(头部)><title>My First Web</title></head> <body(主体)> <h1(一级标题)>Hello Web!</h1> <p(段落标签)>This is my first web page.</p> </body> </html>
1.7 小结
- Web 是基于 B/S 架构 的信息交互方式。
- 核心是 请求-响应模型,通过 HTTP/HTTPS 协议传输数据。
- Web 可提供 静态资源 和 动态资源。
2、HTTP 与 HTTPS 协议
2.1 HTTP 与 HTTPS 区别
- HTTP:明文传输,不安全,默认端口 80。
- HTTPS:在 HTTP 基础上加入 SSL/TLS 加密层,防止中间人攻击,默认端口 443。
2.2 HTTPS 握手流程
TLS 握手过程(建立安全通道) :客户端发起请求 → 服务端返回证书 → 双方协商加密算法 → 建立安全通道。
具体流程:
-
客户端 Hello
浏览器发起请求,告诉服务器自己支持的加密算法、TLS 版本等信息。
-
服务端 Hello + 证书
网站返回 SSL 证书(含公钥,证明服务器身份),并选择一种双方支持的加密算法。
-
客户端验证证书
浏览器检查证书有效性(是否由可信 CA 颁发、未过期、域名匹配),验证通过后生成随机密钥。
-
协商密钥
客户端用服务器公钥加密随机密钥,发送给服务器;服务器用私钥解密,获取随机密钥。
-
加密通信开始
后续 HTTP 数据均通过随机密钥进行对称加密传输,确保数据安全。
2.3 HTTP 状态码
2.3.1 HTTP 状态码概览
HTTP 状态码为 三位数字,按首位分为五类,用于表示请求处理结果:
类型 | 范围 | 含义 | 大白话理解 |
---|---|---|---|
1xx | 100--199 | 信息性状态码 | "我收到了请求,还在处理中" |
2xx | 200--299 | 成功 | "请求成功,服务器给你东西了" |
3xx | 300--399 | 重定向 | "你要的东西搬家了,去新地址找" |
4xx | 400--499 | 客户端错误 | "你请求有问题(URL错、权限不够)" |
5xx | 500--599 | 服务器错误 | "服务器出问题,暂时拿不到东西" |
2.3.2 常用状态码详解
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 | 服务不可用 | "服务器忙不过来了,稍后再试" |
504 Gateway Timeout | 网关超时 | "找别的服务器太慢,超时了" |
生活中的 HTTP 状态码类比
场景 | 状态码 | 对应情况 |
---|---|---|
打开网页正常 | 200 | 成功拿到网页 |
点链接页面搬家 | 301/302 | 浏览器自动跳到新地址 |
输入错网址 | 404 | "没找到这个页面" |
登录需要权限 | 401 | "先登录才能看" |
网站挂了 | 500 | "服务器出问题了" |
总结:HTTP 状态码是服务器对请求的"回话信息",清晰告知请求结果(成功/失败/需跳转)及原因。
3、Nginx 概念
3.1 Nginx 介绍
Nginx ("engine x") 是一款 高性能的 HTTP 服务器与反向代理服务器,由俄罗斯程序员 Igor Sysoev 开发,首个公开版本(0.1.0)发布于 2004 年 10 月,最初为俄罗斯 Rambler.ru 网站设计(该网站访问量曾居俄罗斯第二)。
Nginx 以 BSD-like 协议 开源发行,核心优势包括:
- 高并发:单台物理服务器可支持 30000~50000 个并发请求,基于事件驱动模型(非阻塞 I/O)。
- 轻量级:内存占用低(默认运行仅占用数 MB 内存),CPU 使用率低。
- 稳定可靠:故障率低,支持热部署(升级时不中断服务)。
- 功能丰富:支持静态资源服务、反向代理、负载均衡、SSL 加密、缓存等。
国内使用 Nginx 的知名企业/网站:百度(BWS)、新浪、网易、腾讯等。
Nginx 相关地址
- Rambler 官网:http://www.rambler.ru/
- Nginx 官网:http://nginx.org/
- 版本分类:
- Mainline version:主线版本(更新快,含新功能,适合测试)
- Stable version:稳定版本(推荐生产环境使用)
- Legacy versions:旧版本(仅维护安全更新)
- 旧版本下载:http://mirrors.sohu.com/nginx/
- Nginx 中文参考:http://www.nginx.cn/doc/
3.2 Nginx 与 Apache 的差异
对比维度 | Nginx | Apache |
---|---|---|
处理模型 | 事件驱动(非阻塞 I/O) | 多进程/多线程(阻塞 I/O) |
进程管理 | 避免子进程冗余,主进程+工作进程模式 | 基于子进程/线程,每个请求可能占一个进程 |
资源占用 | 内存、CPU 消耗低 | 高并发下资源消耗较高 |
性能与可伸缩性 | 不依赖硬件,高并发表现优异 | 依赖 CPU、内存等硬件,高并发易瓶颈 |
热部署支持 | 支持(升级/重载配置不中断服务) | 不支持(需重启服务) |
静态资源处理 | 效率高,专门优化 | 效率一般 |
反向代理能力 | 优势明显,支持 TCP 代理、负载均衡 | 相对较弱,需依赖模块 |
3.3 Nginx 进程结构
Nginx 采用 主进程(Master Process)+ 工作进程(Worker Process) 架构,配合事件驱动模型处理 Web 请求:
进程功能说明
-
主进程(Master Process):
- 管理工作进程(创建、销毁、监控)。
- 读取并验证 Nginx 配置文件。
- 处理信号(如重启、停止、重载配置)。
- 不直接处理用户请求,仅负责"管理"。
-
工作进程(Worker Process):
- 所有 Worker 进程平等,共同处理用户请求。
- 数量建议配置为 服务器 CPU 核心数(或核心数×2),充分利用 CPU 资源,避免进程竞争。
- 核心职责:
- 接收并处理客户端网络请求。
- 将请求分发到对应功能模块(如静态资源、反向代理)。
- 执行 I/O 操作,获取响应数据。
- 与后端服务器(如应用服务器、数据库)通信。
- 缓存数据、查询缓存索引。
- 发送响应结果给客户端。
- 接收主进程指令(重启、升级、退出)。
补充:Web 服务器请求处理机制对比
- 多进程方式:每接一个请求生成一个子进程,优点是进程独立、故障隔离;缺点是高并发下资源耗尽快(如 Apache 传统模式)。
- 多线程方式:每接一个请求生成一个线程,优点是资源消耗低;缺点是线程共享内存,一个线程故障可能影响全局(如 IIS)。
- Nginx 事件驱动方式:单进程/多进程处理多请求(非阻塞 I/O),兼顾资源效率与稳定性,适合高并发场景。
4、Nginx 安装
使用脚本安装(方便复制粘贴,具体脚本可结合实际环境编写,核心步骤参考前文"编译安装 Nginx 服务")。
5、Nginx 配置
Nginx 核心配置文件为 /usr/local/nginx/conf/nginx.conf
,通过 vim /usr/local/nginx/conf/nginx.conf
编辑,配置结构分为 全局配置 、I/O 事件配置 、HTTP 配置 三部分。
5.1 全局配置
全局配置对 Nginx 整体生效,主要定义进程、日志、PID 等基础参数:
nginx
#user nobody; # 运行用户,编译时未指定则默认 nobody
worker_processes 4; # 工作进程数量,建议设为 CPU 核心数(或核心数×2),访问量小设为 1 即可
#error_log logs/error.log; # 错误日志路径(默认在 logs 目录)
#pid logs/nginx.pid; # PID 文件路径(默认在 logs 目录)
5.2 I/O 事件配置
通过 events { }
块配置 Nginx 处理网络连接的方式,影响并发性能:
nginx
events {
use epoll; # 使用 epoll 模型(Linux 2.6+ 内核推荐,提升高并发性能)
worker_connections 4096; # 每个工作进程最大连接数(默认 1024)
}
补充说明
- epoll 模型:Linux 内核为高并发设计的 I/O 多路复用接口,比传统 select/poll 效率更高,适合大量并发连接(少量活跃)场景。
- 连接数限制 :若需提高
worker_connections
,需临时修改系统文件句柄限制:ulimit -n 65535
(永久修改需编辑/etc/security/limits.conf
)。 - 总并发能力 :理论总并发数 =
worker_processes × worker_connections
(如 4×4096=16384),实际受硬件、带宽限制。
5.3 HTTP 配置
通过 http { }
块配置 Web 服务核心规则,包括 MIME 类型、日志、连接保持、虚拟主机等,大部分配置嵌套在 server { }
块(虚拟主机)中:
`nginx
http {
1. 基础配置
include
第一章 Web与Nginx网站服务总结
本章围绕Web基础与Nginx网站服务展开,从概念、协议、工具到实践配置,形成完整的知识体系,核心内容可归纳为以下四部分:
总结
-
Web核心定义
Web(万维网)是基于B/S架构(浏览器/服务器) 的超文本信息系统,依赖HTTP/HTTPS协议实现交互,具备分布式(资源跨服务器)、跨平台(浏览器通用)、无状态(请求独立)三大特点。
-
请求-响应流程
一次完整Web访问需经历7个步骤:输入URL→DNS解析(域名转IP)→TCP连接(3次握手)→发送HTTP请求→服务器处理(静态资源直接返回,动态资源转发至应用服务器)→返回HTTP响应→浏览器渲染页面。
-
资源类型与Web发展
- 静态资源(HTML、CSS、图片等):无需服务器计算,直接返回,速度快;
- 动态资源(PHP/Python脚本等):需应用服务器执行代码生成内容,支持个性化交互;
- Web发展三阶段:Web 1.0(只读静态页面)→Web 2.0(用户生成内容,AJAX普及)→Web 3.0(智能化、去中心化)。
二、HTTP/HTTPS协议:Web通信的"语言"
-
协议核心差异
- HTTP:明文传输,不安全,默认端口80;
- HTTPS:基于HTTP+SSL/TLS加密,防中间人攻击,默认端口443,需通过TLS握手建立安全通道(客户端Hello→服务端返回证书→证书验证→密钥协商→加密通信)。
-
HTTP状态码:请求结果的"信号"
按首位分为5类,核心常用状态码需重点掌握:
- 2xx(成功):200 OK(请求正常)、204 No Content(成功无内容);
- 3xx(重定向):301永久重定向、302临时重定向、304内容未修改(用缓存);
- 4xx(客户端错):400请求格式错、401未认证、403无权限、404资源未找到;
- 5xx(服务器错):500内部错误、502网关错、503服务不可用、504网关超时。
三、Nginx核心:高性能Web服务器的优势与架构
-
Nginx定位与优势
Nginx是轻量级高性能HTTP服务器/反向代理服务器,由Igor Sysoev开发,最初用于俄罗斯Rambler.ru网站,核心优势包括:
- 高并发:单台服务器支持3万-5万并发请求(事件驱动非阻塞I/O);
- 轻量稳定:内存占用低,支持热部署(升级不中断服务);
- 功能丰富:静态资源服务、反向代理、负载均衡、SSL加密等。
-
Nginx与Apache差异
对比传统Apache,Nginx在处理模型(事件驱动vs多进程/线程)、资源占用(低vs高)、热部署(支持vs不支持)、静态资源处理(高效vs一般)、反向代理(优势明显vs依赖模块)上更具竞争力,更适合高并发场景。
-
Nginx进程结构
采用"主进程(Master)+工作进程(Worker)"架构:
- 主进程:管理配置、创建/监控工作进程、处理信号(如重启/停止);
- 工作进程:平等处理用户请求,数量建议设为CPU核心数(充分利用硬件,减少进程竞争)。
四、Nginx实践:从安装到高级配置
-
基础配置框架
核心配置文件
/usr/local/nginx/conf/nginx.conf
分为三部分:- 全局配置:定义运行用户、工作进程数、日志/PID路径;
- I/O事件配置:指定epoll模型、单个工作进程最大连接数;
- HTTP配置:包含MIME类型、连接保持、虚拟主机(
server{}
块)等,是Web服务配置的核心。
-
关键功能配置
- 访问状态统计:启用
stub_status
模块,通过/status
路径查看活跃连接数、请求处理量; - 访问控制:基于密码(
auth_basic
+htpasswd
生成密码文件)、基于客户端IP(allow
/deny
指令)限制访问; - 虚拟主机:三种实现方式------基于域名(不同
server_name
)、基于IP(不同监听IP)、基于端口(不同监听端口),满足多网站共享一台服务器的需求。
- 访问状态统计:启用
核心价值
本章通过"理论+实践"结合,既明确了Web通信的底层逻辑(协议、流程),又掌握了Nginx这一高性能工具的部署与配置,可支撑从简单静态网站到多站点、高并发场景的Web服务搭建,为后续复杂应用(如反向代理、负载均衡)奠定基础。