1. Process(进程)
定义:正在运行的程序实例。每个进程有独立的地址空间、代码、数据、堆栈,以及操作系统分配的资源(文件描述符、内存等)。
核心概念:
- PID:进程唯一标识符。
- 父进程与子进程:通过 fork() 创建新进程。
- 守护进程(Daemon):在后台运行、脱离终端的长期进程,如 Nginx、Gunicorn。
- 进程状态:运行(R)、睡眠(S)、僵尸(Z)等。
与部署相关:
- Web 应用(如 Gunicorn)通常以守护进程方式运行。
- 查看进程:ps aux、top、htop。
- 信号控制:kill -9 <PID> 强制终止,kill -15 优雅终止。
示例:
# 查看所有 nginx 进程
ps aux | grep nginx
2. Port(端口)
定义:网络通信中用于区分不同服务或应用程序的逻辑标识,范围 0-65535。IP 地址定位主机,端口定位主机上的具体进程。
端口分类:
- 熟知端口(0-1023):系统保留,如 HTTP(80)、HTTPS(443)、SSH(22)、MySQL(3306)。
- 注册端口(1024-49151):用户服务可用,如 Django/Flask 默认 5000、Gunicorn 常用 8000。
- 动态/私有端口(49152-65535):临时分配给客户端。
常见操作:
- 查看端口占用:netstat -tuln 或 ss -tuln
- 检查某个端口是否监听:lsof -i :80
- 防火墙开放端口:ufw allow 80/tcp(Ubuntu)
在部署链中的作用:
- Nginx 监听 80/443(对外)。
- Gunicorn 监听本地端口(如 8000)或 Unix Socket,只允许 Nginx 访问。
3. Nginx
定义:高性能的 HTTP 服务器和反向代理服务器,也支持负载均衡、缓存、SSL 终止等。
核心功能:
- 静态文件服务:直接返回 HTML/CSS/JS/图片,效率极高。
- 反向代理:将请求转发给后端应用(如 Gunicorn)。
- 负载均衡:分发请求到多个后端节点。
- SSL 终止:处理 HTTPS 加密/解密,减轻后端负担。
配置示例(反向代理到 Gunicorn):
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /static/ {
alias /var/www/example/static/;
}
}
为什么需要 Nginx:
- Python Web 服务器(如 Gunicorn)处理静态文件性能差。
- 提供缓冲、限流、重写等边缘功能。
4. Reverse Proxy(反向代理)
定义:代理服务器的一种,代表客户端向后端服务器请求资源,然后将响应返回给客户端。客户端不知道后端服务器的存在。
正向代理 vs 反向代理:
| 类型 | 代理对象 | 典型用途 | 客户端感知 |
|---|---|---|---|
| 正向代理 | 客户端 | 翻墙、匿名、缓存 | 需要手动配置代理 |
| 反向代理 | 服务器 | 负载均衡、安全、SSL | 无感知(以为直接访问服务器) |
工作流程:
客户端 → (访问 example.com) → Nginx(反向代理)→ 内网多个后端实例(Gunicorn、Flask)
优点:
- 隐藏后端真实 IP 和架构。
- 提供负载均衡和故障转移。
- 集中处理 SSL 证书、压缩、缓存、访问日志。
你之前提到的链路中 Nginx 的位置就是反向代理角色。
5. HTTPS(HTTP over TLS/SSL)
定义:在 HTTP 基础上加入 TLS/SSL 加密层,实现通信加密、身份验证和数据完整性保护。
核心组件:
- 证书(Certificate):由 CA(证书颁发机构)签发,包含域名、公钥等信息。
- 加密流程:
1. 客户端请求 HTTPS 网址。
2. 服务器返回证书。
3. 客户端验证证书(信任链、域名匹配、是否过期)。
4. 客户端生成随机密钥(对称加密密钥),用证书中的公钥加密后发送给服务器。
5. 双方使用该对称密钥加密后续通信。
为什么需要 HTTPS:
- 防止中间人攻击(窃听、篡改)。
- 浏览器信任(显示锁标志)。
- SEO 排名提升、支持 HTTP/2 等高级特性。
部署常用工具:
- Let’s Encrypt:免费自动签发证书。
- Certbot:自动化配置 Nginx + 证书续期。
Nginx HTTPS 配置示例:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# ... 其余配置
}
6. Docker
定义:一种容器化平台,将应用及其所有依赖(代码、运行时、系统工具、库)打包成一个轻量级、可移植的容器。
核心概念:
- 镜像(Image):只读模板,定义容器内容(如 python:3.10-slim)。
- 容器(Container):镜像的运行实例,可被启动、停止、删除。
- Dockerfile:自动化构建镜像的脚本。
- 仓库(Registry):存储和分发镜像(如 Docker Hub)。
与虚拟机的对比:
| 特性 | 容器(Docker) | 虚拟机(VM) |
|---|---|---|
| 操作系统 | 共享宿主机内核 | 每个 VM 有独立内核 |
| 启动时间 | 毫秒级 | 秒级到分钟级 |
| 资源占用 | 低(仅应用+依赖) | 高(完整 OS 开销) |
| 隔离级别 | 进程级隔离 | 硬件级虚拟化 |
典型部署流程:
1. 编写 Dockerfile 定义 Flask 应用环境。
2. 构建镜像:docker build -t myapp .
3. 运行容器:docker run -p 80:8000 myapp
4. 使用 Docker Compose 编排多个容器(App + Nginx + PostgreSQL + Redis)。
Dockerfile 示例(Flask + Gunicorn):
FROM python:3.10-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["gunicorn", "-b", "0.0.0.0:8000", "app:app"]
为什么 Docker 重要:
- 环境一致性(开发、测试、生产)。
- 快速部署和回滚。
- 易于水平扩展和微服务化。
概念关联图(部署视角)
开发者编写 Flask 应用
│
▼
Docker 打包应用 + 环境(镜像)
│
▼
服务器(Linux 宿主机)
│
├─ 进程(Gunicorn worker 进程)
├─ 端口(80、443 给 Nginx,8000 给 Gunicorn)
│
▼
Nginx(反向代理 + HTTPS 终止)
│
▼
外部用户通过 HTTPS 访问
各环节职责:
- Linux 进程:管理运行中的应用(Nginx、Gunicorn 都是后台进程)。
- 端口:让多个服务共存,Nginx 占 80/443 对外,Gunicorn 占内部端口。
- Nginx:反向代理,处理静态文件和 HTTPS。
- Reverse Proxy:模式,将请求转发到内网应用服务器。
- HTTPS:保证公网通信安全。
- Docker:打包整个环境,简化部署和运维。
小结
| 概念 | 一句话总结 | 关键命令/操作 |
|---|---|---|
| Process | 运行中的程序 | ps, kill |
| Port | 服务监听的逻辑通道 | netstat, lsof, ufw |
| Nginx | 高性能 Web 服务器/反向代理 | 配置文件 /etc/nginx/nginx.conf |
| Reverse Proxy | 代表服务器接收请求并转发 | Nginx 的 proxy_pass 指令 |
| HTTPS | 加密 HTTP 通信 | SSL 证书,端口 443 |
| Docker | 轻量级应用容器化 | docker build, docker run, docker-compose |
评论
请登录后发表评论
暂无评论,快来发表第一条评论吧!