一、Nginx 基础认知
1.1 什么是 Nginx
Nginx(engine x)是一款开源、高性能、轻量级 的 HTTP Web 服务器、反向代理服务器、邮件(IMAP/POP3)代理服务器。采用异步非阻塞事件驱动模型(epoll) ,单机可轻松支撑 10 万 + 并发连接 ,内存占用极低,是互联网公司网关层标配。
**国内大厂使用:**百度、京东、阿里、腾讯、新浪、网易、抖音、B 站等几乎全部在用。
核心能力:
- 反向代理
- 负载均衡
- 动静分离
- HTTPS 部署
- 静态资源服务器
- API 网关
- 限流、缓存、黑白名单
1.2 正向代理 vs 反向代理(必懂)
1️⃣ 正向代理
- 代理客户端
- 帮助内网访问外网
- 例:VPN、科学上网
- 客户端知道目标服务器地址
- 作用:突破访问限制、隐藏客户端 IP
2️⃣ 反向代理
- 代理服务端
- 对外统一入口,对内分发请求
- 客户端不知道真实服务器地址
- 作用:隐藏后端 IP、解耦架构、方便扩容、统一入口
一句话区分:正向代理:代理 "人";反向代理:代理 "服务器"。
二、Nginx 安装(Windows + Linux 完整版)
2.1 Linux 安装(CentOS 7/8 通用)
# 1. 安装编译依赖
yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
# 2. 下载稳定版
cd /usr/local
wget http://nginx.org/download/nginx-1.22.0.tar.gz
# 3. 解压
tar -zxvf nginx-1.22.0.tar.gz
cd nginx-1.22.0
# 4. 配置(指定安装目录)
./configure --prefix=/usr/local/nginx
# 5. 编译 + 安装
make && make install
2.2 Windows 安装
- 官网下载:http://nginx.org/en/download.html
- 解压到任意目录(无中文路径)
- 直接双击
nginx.exe启动
三、Nginx 目录结构
nginx/
├── conf/ # 配置文件目录
│ ├── nginx.conf # 主配置文件(核心)
│ └── mime.types # 媒体类型映射
├── html/ # 默认静态页面
├── logs/ # 日志(访问日志、错误日志)
└── sbin/ # 命令目录
└── nginx # 启动程序
四、Nginx 常用命令
# 启动
./nginx
# 快速停止
./nginx -s stop
# 优雅停止(处理完请求再停)
./nginx -s quit
# 重新加载配置(不中断服务)
./nginx -s reload
# 检查配置语法是否正确
./nginx -t
# 查看版本
./nginx -v
五、Nginx 配置文件结构(核心)
Nginx 配置采用块级结构,层级清晰:
# 1. 全局块:全局配置
user nobody;
worker_processes 1; # 工作进程数,建议 = CPU核心数
# 2. events块:连接配置
events {
worker_connections 1024; # 单个进程最大连接数
}
# 3. http块:Web服务配置
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 4. server块:虚拟主机
server {
listen 80; # 监听端口
server_name localhost; # 域名
# 5. location块:请求匹配规则
location / {
root html;
index index.html index.htm;
}
}
}
5.1 核心配置解释
- worker_processes:工作进程,提高并发
- worker_connections:最大连接数
- keepalive_timeout:长连接超时时间
- server:一个域名对应一个 server
- location:URL 路径匹配
六、反向代理(最常用实战)
6.1 作用
- 统一访问入口
- 隐藏后端真实 IP / 端口
- 端口转发
- 多服务域名区分
6.2 实战配置:代理后端 8080
server {
listen 80;
server_name manage.powershop.com;
# 转发请求到后端服务
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_connect_timeout 600;
proxy_read_timeout 600;
}
}
配置后直接访问:http://manage.powershop.com自动转发到 8080 端口。
七、负载均衡(集群必备)
7.1 作用
把请求均匀分发到多台后端服务器,避免单点压力过大,提高可用性。
7.2 配置步骤
# 1. 定义后端服务集群
upstream tomcat_cluster {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}
# 2. 代理到集群
server {
listen 80;
server_name www.powershop.com;
location / {
proxy_pass http://tomcat_cluster;
}
}
7.3 6 种负载均衡策略
1.轮询(默认)
请求依次分配
2.weight 权重(推荐)
7.3 6 种负载均衡策略
轮询(默认)请求依次分配
weight 权重(推荐)
3.ip_hash
同一个 IP 永远访问同一台机器,解决 Session 共享问题
4.east_conn
分发到连接数最少的机器
5.fair
按后端响应时间分配
6.url_hash
按 URL 哈希分配,适合缓存场景
八、动静分离(高性能关键)
8.1 原理
- 静态资源(图片、JS、CSS、HTML、视频)由 Nginx 直接返回
- 动态请求转发给 Tomcat/Java 服务极大提升访问速度,减轻后端压力。
8.2 配置
location ~* \.(gif|jpg|png|jpeg|css|js|ico|mp3|mp4)$ {
root /usr/local/nginx/static; # 静态资源目录
expires 7d; # 浏览器缓存7天
}
九、域名访问本地项目(企业标准方案)
9.1 步骤 1:修改 hosts 文件
Windows:C:\Windows\System32\drivers\etc\hosts
127.0.0.1 manage.powershop.com
127.0.0.1 www.powershop.com
127.0.0.1 api.powershop.com
9.2 步骤 2:Nginx 监听 80 代理
server {
listen 80;
server_name manage.powershop.com;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
9.3 访问
直接打开:http://manage.powershop.com无需端口,更优雅、更贴近生产环境。
十、Nginx 高阶配置
10.1 解决上传文件过大(413 错误)
http {
client_max_body_size 100m;
}
10.2 配置 HTTPS(SSL)
server {
listen 443 ssl;
server_name www.powershop.com;
ssl_certificate cert.pem;
ssl_certificate_key cert.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
}
10.3 限流配置
limit_req_zone $binary_remote_addr zone=myRateLimit:10m rate=10r/s;
server {
location / {
limit_req zone=myRateLimit;
}
}
十一、常见问题与解决方案
1️⃣ Nginx 启动失败
- 80 端口被占用(IIS、Apache、Tomcat)
- 配置文件语法错误:执行
./nginx -t检查
2️⃣ 访问出现 502
- 后端服务未启动
- 防火墙拦截端口
- proxy_pass 地址错误
3️⃣ 反向代理后获取不到真实 IP
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
4️⃣ Vue/React 路由刷新 404
location / {
try_files $uri $uri/ /index.html;
}
十二、企业真实使用场景总结
Nginx 在企业里几乎是必用:
- 用 反向代理 做统一入口
- 用 负载均衡 做集群
- 用 动静分离 提升速度
- 用 域名 + hosts 模拟生产环境
- 用 HTTPS + 限流 保证安全