文章目录
- 一、前言
- [二、什么是 Nginx](#二、什么是 Nginx)
-
- [1. 为什么 Nginx 这么常用](#1. 为什么 Nginx 这么常用)
- [2. 一句话理解 Nginx](#2. 一句话理解 Nginx)
- [三、Nginx 能做什么](#三、Nginx 能做什么)
- [四、Nginx 的核心工作原理](#四、Nginx 的核心工作原理)
-
- [1. 请求流程](#1. 请求流程)
- [2. Nginx 是事件驱动模型](#2. Nginx 是事件驱动模型)
- [五、Nginx 常见核心概念](#五、Nginx 常见核心概念)
-
- [1. main 块](#1. main 块)
- [2. events 块](#2. events 块)
- [3. http 块](#3. http 块)
- [4. server 块](#4. server 块)
- [5. location 块](#5. location 块)
- [6. upstream 块](#6. upstream 块)
- [六、Nginx 配置文件结构详解](#六、Nginx 配置文件结构详解)
- [七、Nginx 最常见的 10 大实战场景](#七、Nginx 最常见的 10 大实战场景)
-
- [场景 1:部署静态网页](#场景 1:部署静态网页)
- [场景 2:部署 Vue/React 前端项目](#场景 2:部署 Vue/React 前端项目)
-
- [为什么要加 `try_files`](#为什么要加
try_files)
- [为什么要加 `try_files`](#为什么要加
- [场景 3:前后端分离项目代理接口](#场景 3:前后端分离项目代理接口)
- [场景 4:多服务按路径转发](#场景 4:多服务按路径转发)
- [场景 5:负载均衡](#场景 5:负载均衡)
- [场景 6:HTTPS 配置](#场景 6:HTTPS 配置)
-
- [HTTP 跳转 HTTPS](#HTTP 跳转 HTTPS)
- 使用场景
- [场景 7:文件下载服务](#场景 7:文件下载服务)
- [场景 8:图片服务器 / 静态资源服务器](#场景 8:图片服务器 / 静态资源服务器)
- [场景 9:请求限流](#场景 9:请求限流)
- [场景 10:IP 白名单 / 黑名单](#场景 10:IP 白名单 / 黑名单)
- [八、Nginx 常见配置详解](#八、Nginx 常见配置详解)
- [九、Nginx 日志配置与分析](#九、Nginx 日志配置与分析)
-
- [1. 访问日志](#1. 访问日志)
- [2. 错误日志](#2. 错误日志)
- [3. 使用场景](#3. 使用场景)
- [十、Nginx 常见错误及排查思路](#十、Nginx 常见错误及排查思路)
- [十一、Nginx 性能优化常见配置](#十一、Nginx 性能优化常见配置)
- [十二、Nginx 在企业架构中的位置](#十二、Nginx 在企业架构中的位置)
- [十三、Nginx 与 Apache 的简单对比](#十三、Nginx 与 Apache 的简单对比)
- [十四、Nginx 常用命令](#十四、Nginx 常用命令)
-
- [1. 查看版本](#1. 查看版本)
- [2. 查看完整编译参数](#2. 查看完整编译参数)
- [3. 检查配置文件是否正确](#3. 检查配置文件是否正确)
- [4. 启动 Nginx](#4. 启动 Nginx)
- [5. 重载配置](#5. 重载配置)
- [6. 停止 Nginx](#6. 停止 Nginx)
- [7. 平滑退出](#7. 平滑退出)
- [8. systemd 管理方式](#8. systemd 管理方式)
- 十五、一个完整的前后端分离配置示例
- 十六、一个多节点负载均衡配置示例
- [十七、一个 HTTPS + 跳转配置示例](#十七、一个 HTTPS + 跳转配置示例)
- [十八、Nginx 学习路线建议](#十八、Nginx 学习路线建议)
-
- 第一步:先会基础部署
- [第二步:学会 location 匹配和 server 配置](#第二步:学会 location 匹配和 server 配置)
- 第三步:学会反向代理
- 第四步:学会负载均衡
- [第五步:学会 HTTPS 和安全配置](#第五步:学会 HTTPS 和安全配置)
- 第六步:学会排障和优化
- [十九、面试和工作中最常问的 Nginx 问题](#十九、面试和工作中最常问的 Nginx 问题)
-
-
- [1. Nginx 有什么作用?](#1. Nginx 有什么作用?)
- [2. Nginx 为什么性能高?](#2. Nginx 为什么性能高?)
- [3. 什么是反向代理?](#3. 什么是反向代理?)
- [4. `root` 和 `alias` 有什么区别?](#4.
root和alias有什么区别?) - [5. 502 Bad Gateway 一般怎么排查?](#5. 502 Bad Gateway 一般怎么排查?)
-
- 二十、总结
一、前言
在互联网系统里,Nginx 几乎是绕不开的组件。
不管是前后端分离项目、Java 后端服务、Python 服务、静态网站部署、反向代理、负载均衡,还是 HTTPS、网关入口、限流防刷,几乎都能看到 Nginx 的身影。
很多人刚接触 Nginx 时,会觉得它只是一个"Web 服务器"。但真正做项目之后会发现,Nginx 的定位远不止于此,它更像是:
- 网站入口
- 请求分发器
- 反向代理
- 负载均衡器
- 静态资源服务器
- 安全防护前置层
这篇文章就从 小白入门 开始,一步一步讲到 企业实战常见用法。
二、什么是 Nginx
Nginx 是一个高性能的 HTTP 服务器、反向代理服务器,同时也支持负载均衡和邮件代理等能力。
更直白一点理解:
Nginx 就是一个专门用来接收网络请求、处理请求、转发请求、分发请求的高性能服务。
1. 为什么 Nginx 这么常用
因为它具备几个非常突出的特点:
- 性能高
- 并发能力强
- 占用资源低
- 配置灵活
- 稳定性好
- 非常适合做前置入口层
2. 一句话理解 Nginx
可以把 Nginx 理解成系统的"总入口"和"流量调度员"。
比如用户访问:
text
https://www.demo.com
请求很可能不是直接打到后端 Java 或 Python 服务,而是先到 Nginx,再由 Nginx 决定:
- 直接返回页面
- 转给后端服务
- 转给某一台服务器
- 拒绝请求
- 限流
- 重定向 HTTPS
三、Nginx 能做什么
很多初学者学 Nginx 时,最大的问题是不知道它到底有什么用。下面先把核心用途讲清楚。
1. 作为 Web 服务器
Nginx 可以直接对外提供网页文件、图片、CSS、JS、下载文件等静态资源。
例如:
nginx
server {
listen 80;
server_name localhost;
location / {
root /data/www/html;
index index.html;
}
}
这段配置表示:
- 监听 80 端口
- 当用户访问
/时 - 去
/data/www/html目录找文件 - 默认首页是
index.html
使用场景
- 静态官网部署
- Vue/React 打包后的前端页面部署
- 图片、JS、CSS 文件访问
- 下载站点
2. 作为反向代理
这是 Nginx 最常见的用途。
用户访问的是 Nginx,但 Nginx 会把请求转发到后端服务,比如 Spring Boot、FastAPI、Django、Node.js。
nginx
server {
listen 80;
server_name api.demo.com;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
这段配置表示:
- 用户访问
api.demo.com - 实际请求先到 Nginx
- Nginx 再转发给本机的 8080 服务
使用场景
- 前端访问后端接口
- 隐藏后端真实地址
- 后端端口不直接暴露到公网
- 统一入口管理
3. 作为负载均衡器
如果后端有多台服务器,Nginx 可以把请求分发给不同的机器。
nginx
upstream backend_servers {
server 192.168.1.101:8080;
server 192.168.1.102:8080;
server 192.168.1.103:8080;
}
server {
listen 80;
server_name demo.com;
location / {
proxy_pass http://backend_servers;
}
}
使用场景
- 多台后端共同提供服务
- 分摊流量压力
- 提高可用性
- 其中一台异常时,流量可以切换到其他节点
4. 作为统一网关入口
Nginx 可以根据不同路径,把请求转发到不同服务。
nginx
upstream user_service {
server 10.0.0.11:8080;
}
upstream order_service {
server 10.0.0.12:8080;
}
server {
listen 80;
server_name demo.com;
location /user/ {
proxy_pass http://user_service;
}
location /order/ {
proxy_pass http://order_service;
}
}
使用场景
- 微服务统一入口
- 不同业务模块按路径分发
- 对外只暴露一个域名
5. 作为 HTTPS 入口
Nginx 可以统一处理 SSL 证书,实现 HTTPS 加密访问。
nginx
server {
listen 443 ssl;
server_name demo.com;
ssl_certificate /etc/nginx/ssl/demo.crt;
ssl_certificate_key /etc/nginx/ssl/demo.key;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
使用场景
- 网站启用 HTTPS
- 接口加密传输
- 统一管理证书
6. 作为安全防护前置层
Nginx 可以实现很多前置安全控制,例如:
- 限流
- 白名单
- 黑名单
- 防盗链
- 请求头控制
- 隐藏后端信息
例如限制请求频率:
nginx
limit_req_zone $binary_remote_addr zone=req_limit_zone:10m rate=2r/s;
server {
listen 80;
server_name demo.com;
location /api/ {
limit_req zone=req_limit_zone burst=5 nodelay;
proxy_pass http://127.0.0.1:8080;
}
}
四、Nginx 的核心工作原理
理解原理之后,很多配置才不会死记硬背。
1. 请求流程
用户访问系统时,通常会经历下面这条链路:
text
浏览器/客户端
↓
Nginx
↓
后端服务
↓
数据库/缓存/消息队列
也就是说:
- 用户先访问 Nginx
- Nginx 再根据规则处理请求
- 决定是自己返回资源,还是转给后端
2. Nginx 是事件驱动模型
Nginx 使用的是 异步、非阻塞、事件驱动 模型。
这意味着它处理大量并发连接时,比传统"一请求一线程"的模式更节省资源。
简单理解:
- 不是每来一个请求就开一个线程
- 而是通过事件通知机制高效处理大量连接
所以它非常适合:
- 高并发 Web 访问
- 静态资源分发
- 大量短连接请求
五、Nginx 常见核心概念
学习 Nginx 配置时,必须搞懂下面这些关键字。
1. main 块
全局配置区域,比如 worker 数量、日志等。
nginx
worker_processes auto;
error_log /var/log/nginx/error.log;
2. events 块
配置事件模型和连接数。
nginx
events {
worker_connections 1024;
}
3. http 块
HTTP 服务的主配置区域,大部分 Web 配置都写在这里。
nginx
http {
include mime.types;
default_type application/octet-stream;
server {
listen 80;
server_name localhost;
}
}
4. server 块
一个 server 就可以理解成一个虚拟主机。
nginx
server {
listen 80;
server_name demo.com;
}
可以配置多个 server,分别处理不同域名或端口。
5. location 块
用于匹配不同 URL 路径,并决定如何处理。
nginx
location / {
root /data/www/html;
}
location /api/ {
proxy_pass http://127.0.0.1:8080;
}
6. upstream 块
定义后端服务器组,常用于负载均衡。
nginx
upstream backend {
server 10.0.0.11:8080;
server 10.0.0.12:8080;
}
六、Nginx 配置文件结构详解
一个典型的配置文件可能长这样:
nginx
worker_processes auto;
events {
worker_connections 2048;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream backend {
server 127.0.0.1:8080;
}
server {
listen 80;
server_name localhost;
location / {
root /data/www/html;
index index.html index.htm;
}
location /api/ {
proxy_pass http://backend;
}
}
}
七、Nginx 最常见的 10 大实战场景
下面直接讲最有价值的部分:实际项目到底怎么用。
场景 1:部署静态网页
配置示例
nginx
server {
listen 80;
server_name www.demo.com;
location / {
root /data/nginx/html;
index index.html;
}
}
适用场景
- 企业官网
- 静态宣传页
- 文档站点
- 简单前端页面
场景 2:部署 Vue/React 前端项目
前端项目打包后,通常得到 dist 目录,然后交给 Nginx 提供访问。
nginx
server {
listen 80;
server_name www.demo.com;
root /data/frontend/dist;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
为什么要加 try_files
因为 Vue Router 或 React Router 使用 history 模式时,刷新某个前端路由会找不到真实文件。
try_files 的作用是:
- 先找真实文件
- 找不到就返回
index.html - 让前端路由自己接管
场景 3:前后端分离项目代理接口
nginx
server {
listen 80;
server_name www.demo.com;
root /data/frontend/dist;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
location /api/ {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
使用场景
- Vue + Spring Boot
- Vue + FastAPI
- React + Django
作用
- 页面由 Nginx 返回
/api/请求转发给后端- 避免前端跨域问题
- 对外只暴露一个入口
场景 4:多服务按路径转发
nginx
upstream user_service {
server 10.0.0.11:8080;
}
upstream order_service {
server 10.0.0.12:8080;
}
server {
listen 80;
server_name api.demo.com;
location /user/ {
proxy_pass http://user_service;
}
location /order/ {
proxy_pass http://order_service;
}
}
使用场景
- 微服务项目
- 网关前置场景
- 按业务模块拆分服务
场景 5:负载均衡
最基本轮询
nginx
upstream backend {
server 10.0.0.11:8080;
server 10.0.0.12:8080;
server 10.0.0.13:8080;
}
server {
listen 80;
server_name demo.com;
location / {
proxy_pass http://backend;
}
}
加权轮询
nginx
upstream backend {
server 10.0.0.11:8080 weight=5;
server 10.0.0.12:8080 weight=3;
server 10.0.0.13:8080 weight=1;
}
IP 哈希
nginx
upstream backend {
ip_hash;
server 10.0.0.11:8080;
server 10.0.0.12:8080;
}
使用场景
- 多节点后端集群
- 会话保持
- 提升并发能力
场景 6:HTTPS 配置
nginx
server {
listen 443 ssl;
server_name www.demo.com;
ssl_certificate /etc/nginx/ssl/demo.crt;
ssl_certificate_key /etc/nginx/ssl/demo.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root /data/frontend/dist;
index index.html;
}
}
HTTP 跳转 HTTPS
nginx
server {
listen 80;
server_name www.demo.com;
return 301 https://$host$request_uri;
}
使用场景
- 生产环境网站
- 后台管理系统
- 对外开放 API
场景 7:文件下载服务
nginx
server {
listen 80;
server_name download.demo.com;
location /files/ {
alias /data/downloads/;
autoindex on;
}
}
使用场景
- 软件安装包下载
- 文档下载
- 日志归档下载
场景 8:图片服务器 / 静态资源服务器
nginx
server {
listen 80;
server_name static.demo.com;
location /images/ {
alias /data/static/images/;
expires 30d;
}
location /js/ {
alias /data/static/js/;
expires 7d;
}
location /css/ {
alias /data/static/css/;
expires 7d;
}
}
使用场景
- 图片资源独立域名
- 前端静态资源缓存
- 提升页面访问速度
场景 9:请求限流
nginx
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=5r/s;
server {
listen 80;
server_name api.demo.com;
location /api/ {
limit_req zone=api_limit burst=10 nodelay;
proxy_pass http://127.0.0.1:8080;
}
}
参数说明
rate=5r/s:每秒最多 5 个请求burst=10:允许短暂突发 10 个请求nodelay:不排队,超出直接处理限制逻辑
使用场景
- 防接口被刷
- 登录接口防暴力请求
- 验证码接口保护
场景 10:IP 白名单 / 黑名单
只允许内网访问
nginx
location /admin/ {
allow 192.168.1.0/24;
deny all;
proxy_pass http://127.0.0.1:8080;
}
禁止某个 IP
nginx
location / {
deny 1.2.3.4;
allow all;
}
使用场景
- 后台管理系统
- 内网运维页面
- 测试接口限制访问
八、Nginx 常见配置详解
1. root 和 alias 的区别
root
nginx
location /img/ {
root /data/static;
}
请求:
text
/img/a.jpg
实际文件路径:
text
/data/static/img/a.jpg
alias
nginx
location /img/ {
alias /data/static/;
}
请求:
text
/img/a.jpg
实际文件路径:
text
/data/static/a.jpg
结论
root:会把 location 路径拼进去alias:直接替换匹配路径
2. proxy_pass 结尾有没有 / 的区别
这是高频坑点。
配置 1
nginx
location /api/ {
proxy_pass http://127.0.0.1:8080;
}
请求:
text
/api/user/list
转发后可能是:
text
http://127.0.0.1:8080/api/user/list
配置 2
nginx
location /api/ {
proxy_pass http://127.0.0.1:8080/;
}
请求:
text
/api/user/list
转发后可能是:
text
http://127.0.0.1:8080/user/list
使用建议
配置时一定要根据后端接口路径决定是否保留前缀。
3. 常见代理请求头设置
nginx
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
含义
Host:保留原始域名X-Real-IP:客户端真实 IPX-Forwarded-For:经过代理链后的真实来源 IPX-Forwarded-Proto:原始访问协议,HTTP 或 HTTPS
很多后端系统做日志、权限判断、获取客户端 IP 时都依赖这些头。
九、Nginx 日志配置与分析
Nginx 主要有两类日志:
- 访问日志
- 错误日志
1. 访问日志
nginx
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
}
2. 错误日志
nginx
error_log /var/log/nginx/error.log warn;
3. 使用场景
- 排查接口访问异常
- 查看用户请求情况
- 定位 404、502、504 等问题
- 分析请求量和来源 IP
十、Nginx 常见错误及排查思路
1. 404 Not Found
常见原因
- 路径配置错误
- 文件不存在
root或alias写错- 前端路由未配置
try_files
排查重点
- 看访问路径
- 看文件实际存在位置
- 看 location 是否匹配正确
2. 403 Forbidden
常见原因
- 文件权限不足
- Nginx 进程无权限读取目录
- 配置了 deny
- SELinux 限制
排查重点
- 检查文件权限
- 检查目录权限
- 检查 allow/deny 配置
3. 502 Bad Gateway
常见原因
- 后端服务没启动
proxy_pass地址写错- 后端端口没监听
- Nginx 无法连接后端
排查步骤
bash
ss -lntp | grep 8080
curl http://127.0.0.1:8080
tail -f /var/log/nginx/error.log
4. 504 Gateway Timeout
常见原因
- 后端处理太慢
- 接口超时
- 数据库查询慢
- Nginx 超时配置太短
可调整配置
nginx
location /api/ {
proxy_pass http://127.0.0.1:8080;
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
}
十一、Nginx 性能优化常见配置
1. 开启 sendfile
nginx
sendfile on;
提升文件传输效率。
2. 开启 gzip 压缩
nginx
gzip on;
gzip_min_length 1k;
gzip_comp_level 5;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
使用场景
- 压缩前端资源
- 减少网络传输量
- 加快页面加载
3. 设置缓存过期时间
nginx
location /static/ {
root /data/www;
expires 7d;
}
使用场景
- 图片、JS、CSS 长缓存
- 减少重复请求
4. 调整 worker 数量
nginx
worker_processes auto;
让 Nginx 根据 CPU 自动设置工作进程数。
十二、Nginx 在企业架构中的位置
在实际生产环境中,Nginx 往往部署在系统入口层,通常位于:
text
公网用户
↓
Nginx / 负载均衡 / WAF
↓
应用服务器
↓
Redis / MySQL / MQ / ES
它经常放在 DMZ 区或入口层,原因是:
- 需要对外接收请求
- 需要保护内网应用
- 统一接入和分发流量
- 便于做安全控制和日志记录
十三、Nginx 与 Apache 的简单对比
| 对比项 | Nginx | Apache |
|---|---|---|
| 高并发表现 | 强 | 相对一般 |
| 静态资源处理 | 强 | 可以 |
| 反向代理 | 强 | 可以 |
| 配置复杂度 | 中等 | 中等 |
| 常见用途 | 网关、静态、代理、负载均衡 | 传统 Web 服务 |
现在互联网项目里,Nginx 更常用于入口层。
十四、Nginx 常用命令
1. 查看版本
bash
nginx -v
2. 查看完整编译参数
bash
nginx -V
3. 检查配置文件是否正确
bash
nginx -t
4. 启动 Nginx
bash
nginx
5. 重载配置
bash
nginx -s reload
6. 停止 Nginx
bash
nginx -s stop
7. 平滑退出
bash
nginx -s quit
8. systemd 管理方式
bash
systemctl start nginx
systemctl stop nginx
systemctl restart nginx
systemctl reload nginx
systemctl status nginx
十五、一个完整的前后端分离配置示例
下面给一个企业里很常见的完整例子。
场景:
- 前端 Vue 打包后放在
/data/frontend/dist - 后端 Spring Boot 跑在
127.0.0.1:8080 - 域名是
www.demo.com - 需要支持前端路由
/api/转发给后端- 开启 gzip
nginx
worker_processes auto;
events {
worker_connections 2048;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
gzip_min_length 1k;
gzip_comp_level 5;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
server {
listen 80;
server_name www.demo.com;
root /data/frontend/dist;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
location /api/ {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
}
十六、一个多节点负载均衡配置示例
场景:
- 有三台后端服务
- Nginx 对外统一提供服务
- 需要分发请求
nginx
upstream app_cluster {
server 10.0.0.11:8080 weight=3;
server 10.0.0.12:8080 weight=2;
server 10.0.0.13:8080 weight=1;
}
server {
listen 80;
server_name api.demo.com;
location / {
proxy_pass http://app_cluster;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
十七、一个 HTTPS + 跳转配置示例
nginx
server {
listen 80;
server_name www.demo.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name www.demo.com;
ssl_certificate /etc/nginx/ssl/demo.crt;
ssl_certificate_key /etc/nginx/ssl/demo.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
root /data/frontend/dist;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
location /api/ {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
十八、Nginx 学习路线建议
如果想真正把 Nginx 学扎实,建议按这个顺序学:
第一步:先会基础部署
- 安装 Nginx
- 启动停止
- 查看日志
- 基础静态页面访问
第二步:学会 location 匹配和 server 配置
- 域名配置
- 端口配置
- root / alias
- index / try_files
第三步:学会反向代理
- proxy_pass
- 请求头转发
- 前后端分离配置
第四步:学会负载均衡
- upstream
- 轮询
- 权重
- ip_hash
第五步:学会 HTTPS 和安全配置
- 证书配置
- HTTP 跳转 HTTPS
- 限流
- IP 白名单
- 防盗链
第六步:学会排障和优化
- 404/403/502/504 处理
- 日志分析
- gzip
- 缓存
- 超时控制
十九、面试和工作中最常问的 Nginx 问题
下面这些问题出现频率很高:
1. Nginx 有什么作用?
答:静态资源服务、反向代理、负载均衡、HTTPS、限流、安全防护等。
2. Nginx 为什么性能高?
答:采用异步非阻塞事件驱动模型,处理高并发连接时资源占用低。
3. 什么是反向代理?
答:客户端访问的是代理服务器,由代理服务器转发请求给真实后端服务。
4. root 和 alias 有什么区别?
答:root 会拼接 location 路径,alias 直接替换路径。
5. 502 Bad Gateway 一般怎么排查?
答:检查后端服务是否启动、端口是否监听、Nginx 能否连通后端、错误日志内容。
二十、总结
Nginx 之所以在互联网架构里地位这么高,根本原因在于它不是单一功能的软件,而是一个能够同时承担多个关键角色的组件:
- 它可以做 Web 服务器
- 可以做反向代理
- 可以做负载均衡
- 可以做入口网关
- 可以做 HTTPS 终止
- 可以做限流和安全控制
对于开发来说,Nginx 是部署和访问入口的重要一环。
对于运维来说,Nginx 是流量调度和安全防护的重要组件。
对于架构来说,Nginx 是连接外部请求和内部服务的桥梁。
真正掌握 Nginx,不只是会写几行配置,而是能够根据业务场景,设计出合适的接入方案、代理方案、分流方案和安全策略。
如果只记一句话,那就是:
Nginx 本质上是互联网系统里的流量入口和请求调度中心。谁掌握了 Nginx,谁就掌握了系统接入层的大部分核心能力。