一、基础概念题(必问)
1. Nginx 是什么?核心应用场景?
- Nginx 是高性能、轻量级的 HTTP Web 服务器、反向代理服务器、邮件代理服务器。
- 核心场景:
- 静态资源 Web 服务(HTML/CSS/JS/ 图片)
- 反向代理、负载均衡
- 动静分离
- HTTPS 部署、限流、缓存、防盗链
- 高并发网关层
2. Nginx 相比 Apache 优势?
- 高并发:异步非阻塞事件驱动(epoll),单机支持万级并发
- 轻量:内存占用低、配置简洁
- 高性能:静态资源处理极快
- 热部署 :支持
reload不中断服务 - 模块化设计、扩展性强
3. Nginx 进程模型(master-worker)?
- master 进程(主进程):读取验证配置、管理 worker 进程、接收信号(reload/stop)、平滑重启
- worker 进程(工作进程):实际处理网络请求、事件循环、响应客户端
- 优点:稳定(一个 worker 挂了不影响整体)、利用多核 CPU、平滑升级
4. 为什么 Nginx 用多进程而非多线程?
- 避免线程切换开销、锁竞争
- 进程独立,稳定性更高
- 充分利用多核,事件驱动模型效率更高
- 平滑重启 / 热部署更安全
二、核心配置 & 语法(高频)
5. Nginx 配置文件结构?
分为 4 块:
- 全局块:worker_processes、error_log 等
- events 块:连接配置(worker_connections、use epoll)
- http 块 :全局 HTTP 配置(gzip、include、upstream)
- 可包含多个 server 块
- server 块 :虚拟主机(listen、server_name、root)
- 包含多个 location 块:匹配 URI 做路由
6. location 匹配规则与优先级(面试必考)
匹配类型(优先级从高到低):
- 精准匹配
=:完全相等优先最高 - ^~ 前缀匹配:匹配到即停止正则检查
- 正则匹配~区分大小写 / ~ 不区分*
- 普通前缀匹配 /xxx
- 通用匹配 /
示例:
bash
location = /index { ... } # 最高
location ^~ /static { ... } # 次之
location ~ \.(jpg|png)$ { ... } # 正则
location / { ... } # 兜底
7. try_files 作用?
按顺序检查文件 / 目录,不存在则转发或返回 404,常用于 SPA(Vue/React)路由。
bash
location / {
try_files $uri $uri/ /index.html;
}
8. rewrite 与 return 区别?
return:直接返回状态码 / URL,停止后续处理,性能高rewrite:URL 重写,可继续匹配其他 location,支持正则重写
三、反向代理 & 负载均衡(核心)
9. 正向代理 vs 反向代理?
- 正向代理:代理客户端,访问外部服务(如翻墙),服务端不知道真实客户端
- 反向代理:代理服务端,客户端不知道真实后端,统一入口、负载、安全
10. Nginx 负载均衡策略(必背)
- 轮询(默认):请求均匀分发
- weight 加权轮询:权重越高,分配越多
- ip_hash:按客户端 IP 哈希,固定访问一台(解决 Session 问题)
- least_conn:最少连接数优先
- fair(第三方):按后端响应时间分配
- url_hash:按 URL 哈希,缓存命中率高
11. upstream 配置示例(加权 + 健康检查)
bash
upstream backend {
server 192.168.1.10:8080 weight=3;
server 192.168.1.11:8080 weight=2;
server 192.168.1.12:8080 backup; # 备用
server 192.168.1.13:8080 down; # 下线
}
location / {
proxy_pass http://backend;
}
12. ip_hash 缺点?
- 后端节点上下线,哈希结果会变,大量 Session 迁移
- 无法按负载动态调整
- 适合有状态服务,不适合微服务无状态架构
四、动静分离 & 缓存
13. 什么是动静分离?
- 静态资源(图片、JS、CSS)由 Nginx 直接返回
- 动态请求(接口)转发给 Tomcat/Java 服务
- 提升访问速度、减轻后端压力
14. Nginx 如何做缓存?
使用 proxy_cache 缓存后端响应:
bash
proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=cache_zone:10m inactive=1d;
location /api {
proxy_cache cache_zone;
proxy_cache_key $host$uri$is_args$args;
proxy_cache_valid 200 304 1h;
}
五、限流 & 安全(高频)
15. Nginx 两种限流方式?
- 连接限流
limit_conn:限制同一 IP 并发连接数 - 请求限流
limit_req:限制单位时间请求数(漏桶算法)
示例(请求限流):
bash
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
location /api {
limit_req zone=req_limit burst=5 nodelay;
}
burst:突发队列nodelay:突发请求不延迟直接处理
16. 如何实现防盗链?
通过 valid_referers 校验来源:
bash
location ~* \.(jpg|png|gif)$ {
valid_referers none blocked server_names *.xxx.com;
if ($invalid_referer) {
return 403;
}
}
17. Nginx 配置 HTTPS 步骤?
- 申请 SSL 证书(crt/key)
- 监听 443 端口,配置 ssl_certificate/ssl_certificate_key
- 开启 ssl、配置协议与加密套件
- 80 端口重定向到 443
六、性能优化(高级面试)
18. Nginx 常用优化配置?
worker_processes auto:与 CPU 核心数一致worker_connections 10240:单进程最大连接数use epoll:事件模型keepalive_timeout 65:长连接超时open_file_cache:文件描述符缓存gzip on:压缩文本资源- 关闭 access_log 或开启缓冲
19. 什么是惊群问题?Nginx 如何解决?
- 惊群:多 worker 同时等待同一个连接,只有一个抢到,浪费资源
- Nginx 解决方案:互斥锁
accept_mutex,同一时间只有一个 worker 接收新连接
七、高可用 & 部署
20. Nginx 如何实现高可用?
使用 Keepalived + Nginx:
- 主备 Nginx 节点,虚拟 IP(VIP)漂移
- 主节点挂掉,VIP 自动切到备机
- 结合脚本检测 Nginx 存活,自动触发切换
21. Nginx 平滑重启 / 重载命令?
- 重载配置(不中断服务):
nginx -s reload - 快速停止:
nginx -s stop - 优雅停止(处理完请求):
nginx -s quit - 检查配置:
nginx -t
八、故障排查(场景题必考)
22. 502 Bad Gateway 原因?
- 后端服务(Tomcat)宕机 / 无响应
- 后端超时、队列满、拒绝连接
- upstream 配置错误
- 后端进程卡死、线程池耗尽
23. 504 Gateway Timeout 原因?
- Nginx 等待后端响应超时
- 后端业务逻辑慢、DB 慢查询、死锁
- proxy_read_timeout 时间过短
24. 403 Forbidden 原因?
- 目录 / 文件权限不足
- 禁止目录浏览(autoindex off)
- IP 黑名单、防盗链拦截
- 配置错误无首页文件
25. 404 Not Found 原因?
- 文件不存在
- location 匹配错误
- root/alias 路径错误
- 后端接口不存在
九、高频综合面试题
26. Nginx 处理一个 HTTP 请求完整流程?
- 建立 TCP 连接(三次握手)
- master 接收连接,转给 worker
- 解析请求行、请求头
- 匹配 server_name → 匹配 location
- 执行 rewrite、try_files、权限校验
- 静态资源直接返回 / 动态请求 proxy_pass 转发
- 接收后端响应,返回客户端
- 关闭 / 保持长连接
27. alias 和 root 区别?
root:路径拼接 = root + locationalias:精确替换路径,不拼接 location
bash
location /img/ {
root /data; # 实际路径 /data/img/xxx.jpg
}
location /img/ {
alias /data/static/; # 实际路径 /data/static/xxx.jpg
}
28. Nginx 为什么能支撑高并发?
- 异步非阻塞 + epoll 事件驱动
- 多进程利用多核
- 内存池设计,减少内存碎片
- 零拷贝(sendfile)高效输出静态文件
- 无锁设计,请求独立处理
十、简短速记版(面试前 10 分钟背)
- 进程:master 管理,worker 干活
- location 优先级:
=>^~> 正则 > 普通 >/ - 负载策略:轮询、weight、ip_hash、least_conn
- 限流:limit_req(漏桶)、limit_conn
- 502 = 后端挂 / 拒绝;504 = 后端超时;403 = 权限 / 防盗链
- 优化:worker_processes、epoll、长连接、gzip、缓存
- 高可用:Keepalived + VIP