一、Web 基础概念
1.1 Web 概述
-
定义:World Wide Web(万维网),基于 HTTP/HTTPS 的超文本信息系统。
-
特点:
-
分布式:资源分布在全球服务器。
-
跨平台:只要有浏览器即可访问。
-
无状态:每次 HTTP 请求都是独立的,服务器不会记住客户端状态(除非使用 Cookie/Session)
-
1.2 B/S 架构
-
Browser/Server 模型:
-
浏览器:用户的入口、发送请求、渲染页面。
-
服务器:接收请求、返回资源。
-
用户浏览器 ──> Web服务器(Nginx/Apache)
-
│ └─> 应用服务器(PHP/Python/Java)
│ └─> 数据库(MySQL/Redis)
1.3 Web 请求响应流程
-
输入 URL :用户在浏览器输入
http://www.example.com
。 -
DNS 解析:浏览器将域名解析为 IP 地址。
-
建立连接:浏览器与 Web 服务器建立 TCP 连接(3 次握手)。
-
发送请求:浏览器发起 HTTP 请求(GET/POST)。
-
服务器处理:
-
Web 服务器处理静态资源请求
-
动态请求转发到应用服务器(如 Tomcat、Django)
-
应用服务器可能再查询数据库
-
-
返回响应:Web 服务器将结果打包成 HTTP 响应报文返回浏览器。
-
渲染页面:浏览器解析 HTML、加载 CSS/JS、渲染最终页面。
浏览器 <----> Web服务器 <----> 应用服务器 <----> 数据库
1.4 静态资源 vs 动态资源
类型 | 特点 | 示例 |
---|---|---|
静态资源 | 直接返回,速度快 | HTML/CSS/图片/JS |
动态资源 | 服务器端生成,支持交互 | PHP/Python/Java/Ruby 脚本 |
1.5 Web 发展阶段
-
Web 1.0:只读,静态页面。
-
Web 2.0:交互式,用户生成内容(AJAX)。
-
Web 3.0:智能化,语义网/区块链/去中心化。
二、HTTP/HTTPS 协议
2.1 HTTP vs HTTPS
-
HTTP:明文传输,不安全。
-
HTTPS:HTTP + SSL/TLS 加密,防中间人攻击。
2.2 TLS 握手流程
-
客户端发起请求 → 服务端返回证书 → 双方协商加密算法 → 建立安全通道。
-
客户端 Hello → 服务端 Hello + 证书 → 客户端验证 → 加密通信
流程:
- 客户端 Hello
- 浏览器发起请求,告诉服务器自己支持哪些加密算法。
-
服务端 Hello + 证书
- 网站返回 SSL 证书(证明身份),选择一种加密算法。
-
客户端验证证书
- 浏览器检查证书是否可信(CA 颁发、没过期、域名匹配)。
-
协商密钥
- 双方生成一个临时密钥,用于对称加密后续通信。
-
加密通信开始
- 后续 HTTP 数据都通过加密通道传输。
2.3 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 | "服务器出问题了" |
三、Nginx 介绍与配置
3.1 Nginx 简介
-
高性能 HTTP/反向代理服务器,支持高并发(3w~5w/台)。
-
用途:
-
静态资源服务:可以直接把网页、图片、视频这些文件发给用户。
-
反向代理:用户访问你的服务器,Nginx 可以帮你把请求转发到后端真正处理请求的服务器。
-
负载均衡:当有很多后端服务器时,Nginx 可以智能分配流量,让每台服务器都不忙不过来。
-
高并发处理:用事件驱动的方式处理请求,能同时处理成千上万的用户请求,而不会占用太多资源。
-
优势:
-
轻量级,占用内存小
-
支持百万级并发访问
-
稳定可靠,开源且社区活跃
3.2 Nginx vs Apache
特性 | Nginx | Apache |
---|---|---|
架构 | 事件驱动 | 进程/线程驱动 |
并发能力 | 高 | 一般 |
热部署 | 支持 | 不支持 |
静态文件处理 | 高效 | 一般 |
反向代理 | 优势明显 | 一般 |
-
Nginx是一个甚于事件的Web服务器,Apache是一个基于流程的服务器;
-
Nginx避免子进程的概念,Apache是基于子进程的;
-
Nginx在内存消耗和连接方面更好,Apache在内存消耗和连接方面一般;
-
Nginx的性能和可伸缩性不依赖于硬件,Apache依赖于CPU和内存等硬件;
-
Nginx支持热部署,Apache不支持热部署;
-
Nginx对于静态文件处理具有更高效率,Apache相对一般;
-
Nginx在反向代理场景具有明显优势,Apache相对一般。
3.3 Nginx 进程结构
-
多进程模型,Master检查控制 Worker 进程处理请求。
-
Worker 数量建议 = CPU 核心数,避免过多竞争。
四、Nginx 配置详解
4.1 主配置文件:nginx.conf
全局配置
nginx
user nobody;
worker_processes 4;
error_log logs/error.log;
pid logs/nginx.pid;
I/O 事件配置
nginx
events {
use epoll;
worker_connections 4096;
}
HTTP 配置
nginx
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name www.kgc.com;
charset utf-8;
root html;
index index.html index.php;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
五、Nginx 虚拟主机
5.1 基于域名
nginx
server {
listen 80;
server_name www.yjs.com;
root /var/www/html/yjs;
}
server {
listen 80;
server_name www.benet.com;
root /var/www/html/benet;
}
5.2 基于 IP
nginx
server {
listen 192.168.10.21:80;
server_name www.yjs.com;
root /var/www/html/yjs;
}
server {
listen 192.168.10.40:80;
server_name www.benet.com;
root /var/www/html/benet;
}
5.3 基于端口
nginx
server {
listen 8080;
server_name www.yjs.com;
root /var/www/html/yjs;
}
server {
listen 8888;
server_name www.benet.com;
root /var/www/html/benet;
}
六、访问控制与状态统计
6.1 状态统计
nginx
location /status {
stub_status on;
access_log off;
}
6.2 基于密码认证
nginx
auth_basic "secret";
auth_basic_user_file /usr/local/nginx/passwd.db;
6.3 基于 IP 控制
nginx
allow 192.168.10.20;
deny all;
总结
-
Web 基础:B/S 架构、请求响应流程、动静资源区别。
-
HTTP/HTTPS:加密、状态码、握手流程。
-
Nginx:高性能、多进程、配置灵活。
-
虚拟主机:域名/IP/端口三种方式。
-
安全控制:状态监控、密码认证、IP 黑白名单。