Nginx 高频面试题(23道 + 详细答案)

以下是 2025–2026 年高频 Nginx 面试题(共 23 道),覆盖基础 → 中级 → 高级 → 场景题,答案尽量写得清晰、结构化、生产向,适合背诵 + 理解 + 面试现场发挥。难度从易到难排序。

基础篇(1–8)

  1. 什么是 Nginx?它主要用来做什么?
    Nginx(读作 Engine-X)是一个高性能的开源 Web 服务器、反向代理服务器、负载均衡器、HTTP 缓存和邮件代理
    2025–2026 年最常见的四大核心用途:
  • 静态资源服务器(最高效)
  • 反向代理 + 负载均衡(微服务网关前置)
  • 四/七层负载均衡(TCP/UDP + HTTP)
  • Ingress Controller(K8s 最常用的一种)
  1. Nginx 为什么性能这么高?能抗多少并发?
    核心原因:异步非阻塞事件驱动模型 + epoll/kqueue(而非 Apache 的进程/线程模型)。
    一个 master + 多个 worker 进程模型,每个 worker 单线程处理成千上万连接。
    生产经验:单机 4核8G 配置,开启 gzip + keepalive,轻松 5–10 万 QPS;优化后单机可达 20–30 万 QPS。
  2. Nginx 是如何处理一个 HTTP 请求的?(事件驱动流程)
  3. 客户端建立 TCP 连接 → accept
  4. epoll 监听 → 读事件就绪
  5. 读取请求头 → 解析 HTTP 请求行/头
  6. 根据 server_name / listen / location 匹配
  7. upstream 或本地文件 → 输出响应头 + body
  8. keepalive 或 close 连接
    整个过程不阻塞,靠状态机 + 事件循环驱动。
  9. 正向代理和反向代理的区别? 项目 正向代理 反向代理 代理谁 客户端(替客户端去访问目标) 服务器(替服务器接收请求) 客户端知道吗 知道要设置代理 不知道(以为直接访问 Nginx) 典型场景 科学上网、公司内网突破 负载均衡、隐藏真实后端、动静分离 Nginx 支持 ngx_http_proxy_module(较少用) 默认支持,最强项
  10. Nginx 有哪些常见的负载均衡策略?(至少说 5 种)
  • round_robin(默认,加权)
  • least_conn(最少连接,适合长连接场景)
  • ip_hash(会话保持,hash(ip))
  • hash(任意变量,如 $request_uri、$arg_token)
  • least_time(商业版才有,综合延迟最低)
    2025+ 趋势:least_conn + keepalive 组合最受欢迎。
  1. 什么是动静分离?Nginx 怎么实现?
    动态请求(php、java、go 等后端接口)交给 upstream,反向代理;
    静态资源(图片、css、js、html、字体、视频等)由 Nginx 直接读取本地磁盘或内存返回。
    典型配置:
   location ~* \.(jpg|png|gif|css|js|woff2?|svg|ico)$ {
       root /data/static;
       expires 30d;
       access_log off;
   }
  1. Nginx 的 worker_processes 和 worker_connections 应该怎么设置?
  • worker_processes = CPU 核数(或 auto)
  • worker_connections = 每个 worker 能同时保持的连接数,通常 1024–4096
  • worker_rlimit_nofile ≥ worker_connections × 2(打开文件数限制)
    经验公式:总并发 ≈ worker_processes × worker_connections × 0.7–0.8
  1. Nginx 如何实现优雅重载(平滑重启)?
   nginx -s reload          # 平滑重载配置(不中断连接)
   nginx -s reopen          # 重新打开日志文件(常用于日志切分)
   nginx -s stop            # 优雅停止(等请求处理完)
   kill -QUIT <master pid>  # 同上

中高级篇(9–15)

  1. Nginx 如何实现限流?(限流算法)
    两种主流方式:
  • 漏桶(ngx_http_limit_req_module)
    nginx limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s; limit_req zone=mylimit burst=20 nodelay;
  • 令牌桶(ngx_http_limit_conn_module + lua)
  • OpenResty / nginx + lua-resty-limit-traffic 实现更精细的令牌桶
  1. Nginx 如何配置 HTTPS?(2025–2026 推荐写法) server { listen 443 ssl http2; server_name example.com;ssl_certificate /etc/nginx/ssl/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:...(推荐 Mozilla 中间配置); ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; add_header Strict-Transport-Security "max-age=31536000" always;}
  2. Nginx 如何做缓存?(proxy_cache) proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off; server { location / { proxy_cache my_cache; proxy_cache_valid 200 302 1h; proxy_cache_valid 404 1m; proxy_pass http://backend; add_header X-Cache-Status $upstream_cache_status; } }
  3. Nginx 怎么实现灰度发布 / 金丝雀发布?
    常见三种方式:
    1. split_clients(基于 cookie / header / ip 百分比分流)
    2. lua + upstream + hash(OpenResty 推荐)
    3. 多个 upstream + weight / max_fails / fail_timeout 动态调整
  4. Nginx location 匹配优先级顺序是什么?(非常高频)
    1. = 精确匹配(最高)
    2. ^~ 前缀匹配(一旦命中不再正则)
    3. ~ / ~* 正则匹配(区分大小写 / 不区分)
    4. 前缀匹配(最长前缀)
    5. / 通用前缀(最低)
  5. 502 Bad Gateway 常见原因及排查顺序?
    1. upstream 服务挂了 / 没启动
    2. upstream 连接超时(proxy_connect_timeout 默认60s)
    3. upstream 读写超时(proxy_read_timeout / send_timeout)
    4. Nginx worker 连接数打满
    5. 后端返回 header 过大(proxy_buffer_size)
      排查顺序:netstat -anpt | grep 502 → upstream 日志 → nginx error.log
  6. Nginx 如何防盗链?(referer + access_key)
    nginx valid_referers none blocked server_names *.example.com; if ($invalid_referer) { return 403; }
    更安全做法:使用 access_key(时间戳 + md5 签名)

高级 / 场景题(16–23)

  1. Nginx 与 OpenResty 的核心区别?
    OpenResty = Nginx + LuaJIT + 众多 Lua 库
    核心优势:可编程(access_by_lua、content_by_lua、header_filter_by_lua 等阶段)
    2026 年:几乎所有复杂网关都用 OpenResty 实现
  2. 如何用 Nginx 实现简单的 WAF 功能?
    • ngx_http_limit_req + limit_conn
    • deny 恶意 IP(geo 模块)
    • lua-resty-waf / naxsi
    • 检测 User-Agent、SQL 注入、正则黑名单
  3. Nginx 在 Kubernetes 中最常见的部署方式?
    • Deployment + Service(传统)
    • Ingress-Nginx Controller(最主流)
    • Nginx Ingress + cert-manager + external-dns
  4. 解释 proxy_next_upstream 的作用和常见配置
    当 upstream 返回 502/503/504/invalid header 等错误时,自动切换下一个后端。 proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; proxy_next_upstream_timeout 0; # 不限制总超时 proxy_next_upstream_tries 3; # 最多尝试 3 次
  5. Nginx 如何处理大文件上传? client_max_body_size 500m; client_body_buffer_size 128k; client_body_timeout 120s; proxy_request_buffering off; # 流式上传(推荐大文件)
  6. 如何监控 Nginx 的性能指标?
    • stub_status 模块(基础活跃连接数)
    • prometheus + nginx-prometheus-exporter
    • key 指标:active connections、accepts、handled、requests、QPS、4xx/5xx 比率
  7. Nginx 日志如何做切分和不丢失?access_log /var/log/nginx/access.log main buffer=32k flush=5m;
    • logrotate 或 nginx -s reopen + mv + kill -USR1
  8. 你线上遇到过最难的 Nginx 问题是什么?怎么解决的?(压轴题)
    典型高频回答示例:
    • keepalive 连接耗尽导致雪崩 → 调大 worker_connections + upstream keepalive
    • 大促瞬间 QPS 暴增导致 accept queue 满 → 调大 net.core.somaxconn + backlog
    • SSL handshake 慢 → 开启 TLSv1.3 + session resumption + OCSP stapling
    • upstream 偶发 504 → 增加 proxy_read_timeout + 优化后端慢查询

这些题目覆盖了 90%+ 的 Nginx 面试范围(从初创到大厂)。建议:先背核心 1–15 题,再根据简历项目挑 3–5 个高级题深入准备真实案例

有哪几道你觉得最容易被问到,或者想听更详细的配置示例?可以告诉我,我再展开。祝你面试顺利!

文章已创建 5245

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部