Nginx 高频面试题(含答案)

一、基础概念题(必问)

1. Nginx 是什么?核心应用场景?

  • Nginx 是高性能、轻量级的 HTTP Web 服务器、反向代理服务器、邮件代理服务器
  • 核心场景:
    1. 静态资源 Web 服务(HTML/CSS/JS/ 图片)
    2. 反向代理、负载均衡
    3. 动静分离
    4. HTTPS 部署、限流、缓存、防盗链
    5. 高并发网关层

2. Nginx 相比 Apache 优势?

  1. 高并发:异步非阻塞事件驱动(epoll),单机支持万级并发
  2. 轻量:内存占用低、配置简洁
  3. 高性能:静态资源处理极快
  4. 热部署 :支持 reload 不中断服务
  5. 模块化设计、扩展性强

3. Nginx 进程模型(master-worker)?

  • master 进程(主进程):读取验证配置、管理 worker 进程、接收信号(reload/stop)、平滑重启
  • worker 进程(工作进程):实际处理网络请求、事件循环、响应客户端
  • 优点:稳定(一个 worker 挂了不影响整体)、利用多核 CPU、平滑升级

4. 为什么 Nginx 用多进程而非多线程?

  1. 避免线程切换开销、锁竞争
  2. 进程独立,稳定性更高
  3. 充分利用多核,事件驱动模型效率更高
  4. 平滑重启 / 热部署更安全

二、核心配置 & 语法(高频)

5. Nginx 配置文件结构?

分为 4 块:

  1. 全局块:worker_processes、error_log 等
  2. events 块:连接配置(worker_connections、use epoll)
  3. http 块 :全局 HTTP 配置(gzip、include、upstream)
    • 可包含多个 server 块
  4. server 块 :虚拟主机(listen、server_name、root)
    • 包含多个 location 块:匹配 URI 做路由

6. location 匹配规则与优先级(面试必考)

匹配类型(优先级从高到低):

  1. 精准匹配 =:完全相等优先最高
  2. ^~ 前缀匹配:匹配到即停止正则检查
  3. 正则匹配~区分大小写 / ~ 不区分*
  4. 普通前缀匹配 /xxx
  5. 通用匹配 /

示例:

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 负载均衡策略(必背)

  1. 轮询(默认):请求均匀分发
  2. weight 加权轮询:权重越高,分配越多
  3. ip_hash:按客户端 IP 哈希,固定访问一台(解决 Session 问题)
  4. least_conn:最少连接数优先
  5. fair(第三方):按后端响应时间分配
  6. 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 两种限流方式?

  1. 连接限流 limit_conn:限制同一 IP 并发连接数
  2. 请求限流 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 步骤?

  1. 申请 SSL 证书(crt/key)
  2. 监听 443 端口,配置 ssl_certificate/ssl_certificate_key
  3. 开启 ssl、配置协议与加密套件
  4. 80 端口重定向到 443

六、性能优化(高级面试)

18. Nginx 常用优化配置?

  1. worker_processes auto:与 CPU 核心数一致
  2. worker_connections 10240:单进程最大连接数
  3. use epoll:事件模型
  4. keepalive_timeout 65:长连接超时
  5. open_file_cache:文件描述符缓存
  6. gzip on:压缩文本资源
  7. 关闭 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 原因?

  1. 后端服务(Tomcat)宕机 / 无响应
  2. 后端超时、队列满、拒绝连接
  3. upstream 配置错误
  4. 后端进程卡死、线程池耗尽

23. 504 Gateway Timeout 原因?

  • Nginx 等待后端响应超时
  • 后端业务逻辑慢、DB 慢查询、死锁
  • proxy_read_timeout 时间过短

24. 403 Forbidden 原因?

  1. 目录 / 文件权限不足
  2. 禁止目录浏览(autoindex off)
  3. IP 黑名单、防盗链拦截
  4. 配置错误无首页文件

25. 404 Not Found 原因?

  1. 文件不存在
  2. location 匹配错误
  3. root/alias 路径错误
  4. 后端接口不存在

九、高频综合面试题

26. Nginx 处理一个 HTTP 请求完整流程?

  1. 建立 TCP 连接(三次握手)
  2. master 接收连接,转给 worker
  3. 解析请求行、请求头
  4. 匹配 server_name → 匹配 location
  5. 执行 rewrite、try_files、权限校验
  6. 静态资源直接返回 / 动态请求 proxy_pass 转发
  7. 接收后端响应,返回客户端
  8. 关闭 / 保持长连接

27. alias 和 root 区别?

  • root:路径拼接 = root + location
  • alias:精确替换路径,不拼接 location
bash 复制代码
location /img/ {
    root /data; # 实际路径 /data/img/xxx.jpg
}
location /img/ {
    alias /data/static/; # 实际路径 /data/static/xxx.jpg
}

28. Nginx 为什么能支撑高并发?

  1. 异步非阻塞 + epoll 事件驱动
  2. 多进程利用多核
  3. 内存池设计,减少内存碎片
  4. 零拷贝(sendfile)高效输出静态文件
  5. 无锁设计,请求独立处理

十、简短速记版(面试前 10 分钟背)

  1. 进程:master 管理,worker 干活
  2. location 优先级:= > ^~ > 正则 > 普通 > /
  3. 负载策略:轮询、weight、ip_hash、least_conn
  4. 限流:limit_req(漏桶)、limit_conn
  5. 502 = 后端挂 / 拒绝;504 = 后端超时;403 = 权限 / 防盗链
  6. 优化:worker_processes、epoll、长连接、gzip、缓存
  7. 高可用:Keepalived + VIP
相关推荐
EMTime6 小时前
Docker运行OpenWRT
运维·docker·容器
lolo大魔王7 小时前
Linux 文件系统超全面详解(原理、结构、挂载、分区、inode、日志、管理命令)
linux·运维·服务器
zyl837219 小时前
Docker 使用手册
运维·docker·容器
古月方枘Fry10 小时前
MGRE实验
运维·服务器
stolentime10 小时前
FreeDomain 本地开发环境快速搭建指南
运维·服务器·网络
bush411 小时前
嵌入式linux学习记录四
linux·运维·学习
lihao lihao12 小时前
软硬链接
linux·运维·服务器
TOWE technology13 小时前
智能安防监控系统如何做好防雷?——视频信号SPD综合应用方案解析
运维·服务器·防雷产品·信号保护·信号防雷·spd
楼田莉子13 小时前
Docker学习:Docker介绍及其架构介绍
运维·后端·学习·docker·容器·架构
大明者省13 小时前
IIS 端口绑定正常访问的原理说明与常见误区澄清
运维·服务器·笔记