欢迎光临
我们一直在努力

Nginx 高频面试题(含答案)

一、基础概念题(必问)

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
  • 通用匹配 /
  • 示例:

    location = /index { … } # 最高
    location ^~ /static { … } # 次之
    location ~ \\.(jpg|png)$ { … } # 正则
    location / { … } # 兜底

    7. try_files 作用?

            按顺序检查文件 / 目录,不存在则转发或返回 404,常用于 SPA(Vue/React)路由。

    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 配置示例(加权 + 健康检查)

    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 缓存后端响应:

    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:限制单位时间请求数(漏桶算法)
  • 示例(请求限流):

    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 校验来源:

    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 + location
    • alias:精确替换路径,不拼接 location

    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
  • 赞(0)
    未经允许不得转载:171主机测评 » Nginx 高频面试题(含答案)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址