以下是 2025–2026 年高频 Nginx 面试题(共 23 道),覆盖基础 → 中级 → 高级 → 场景题,答案尽量写得清晰、结构化、生产向,适合背诵 + 理解 + 面试现场发挥。难度从易到难排序。
基础篇(1–8)
- 什么是 Nginx?它主要用来做什么?
Nginx(读作 Engine-X)是一个高性能的开源 Web 服务器、反向代理服务器、负载均衡器、HTTP 缓存和邮件代理。
2025–2026 年最常见的四大核心用途:
- 静态资源服务器(最高效)
- 反向代理 + 负载均衡(微服务网关前置)
- 四/七层负载均衡(TCP/UDP + HTTP)
- Ingress Controller(K8s 最常用的一种)
- Nginx 为什么性能这么高?能抗多少并发?
核心原因:异步非阻塞事件驱动模型 + epoll/kqueue(而非 Apache 的进程/线程模型)。
一个 master + 多个 worker 进程模型,每个 worker 单线程处理成千上万连接。
生产经验:单机 4核8G 配置,开启 gzip + keepalive,轻松 5–10 万 QPS;优化后单机可达 20–30 万 QPS。 - Nginx 是如何处理一个 HTTP 请求的?(事件驱动流程)
- 客户端建立 TCP 连接 → accept
- epoll 监听 → 读事件就绪
- 读取请求头 → 解析 HTTP 请求行/头
- 根据 server_name / listen / location 匹配
- upstream 或本地文件 → 输出响应头 + body
- keepalive 或 close 连接
整个过程不阻塞,靠状态机 + 事件循环驱动。 - 正向代理和反向代理的区别? 项目 正向代理 反向代理 代理谁 客户端(替客户端去访问目标) 服务器(替服务器接收请求) 客户端知道吗 知道要设置代理 不知道(以为直接访问 Nginx) 典型场景 科学上网、公司内网突破 负载均衡、隐藏真实后端、动静分离 Nginx 支持 ngx_http_proxy_module(较少用) 默认支持,最强项
- Nginx 有哪些常见的负载均衡策略?(至少说 5 种)
- round_robin(默认,加权)
- least_conn(最少连接,适合长连接场景)
- ip_hash(会话保持,hash(ip))
- hash(任意变量,如 $request_uri、$arg_token)
- least_time(商业版才有,综合延迟最低)
2025+ 趋势:least_conn + keepalive 组合最受欢迎。
- 什么是动静分离?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;
}
- 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
- Nginx 如何实现优雅重载(平滑重启)?
nginx -s reload # 平滑重载配置(不中断连接)
nginx -s reopen # 重新打开日志文件(常用于日志切分)
nginx -s stop # 优雅停止(等请求处理完)
kill -QUIT <master pid> # 同上
中高级篇(9–15)
- 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 实现更精细的令牌桶
- 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;} - 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; } } - Nginx 怎么实现灰度发布 / 金丝雀发布?
常见三种方式:- split_clients(基于 cookie / header / ip 百分比分流)
- lua + upstream + hash(OpenResty 推荐)
- 多个 upstream + weight / max_fails / fail_timeout 动态调整
- Nginx location 匹配优先级顺序是什么?(非常高频)
- = 精确匹配(最高)
- ^~ 前缀匹配(一旦命中不再正则)
- ~ / ~* 正则匹配(区分大小写 / 不区分)
- 前缀匹配(最长前缀)
- / 通用前缀(最低)
- 502 Bad Gateway 常见原因及排查顺序?
- upstream 服务挂了 / 没启动
- upstream 连接超时(proxy_connect_timeout 默认60s)
- upstream 读写超时(proxy_read_timeout / send_timeout)
- Nginx worker 连接数打满
- 后端返回 header 过大(proxy_buffer_size)
排查顺序:netstat -anpt | grep 502→ upstream 日志 → nginx error.log
- Nginx 如何防盗链?(referer + access_key)
nginx valid_referers none blocked server_names *.example.com; if ($invalid_referer) { return 403; }
更安全做法:使用 access_key(时间戳 + md5 签名)
高级 / 场景题(16–23)
- Nginx 与 OpenResty 的核心区别?
OpenResty = Nginx + LuaJIT + 众多 Lua 库
核心优势:可编程(access_by_lua、content_by_lua、header_filter_by_lua 等阶段)
2026 年:几乎所有复杂网关都用 OpenResty 实现 - 如何用 Nginx 实现简单的 WAF 功能?
- ngx_http_limit_req + limit_conn
- deny 恶意 IP(geo 模块)
- lua-resty-waf / naxsi
- 检测 User-Agent、SQL 注入、正则黑名单
- Nginx 在 Kubernetes 中最常见的部署方式?
- Deployment + Service(传统)
- Ingress-Nginx Controller(最主流)
- Nginx Ingress + cert-manager + external-dns
- 解释 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 次 - Nginx 如何处理大文件上传?
client_max_body_size 500m; client_body_buffer_size 128k; client_body_timeout 120s; proxy_request_buffering off; # 流式上传(推荐大文件) - 如何监控 Nginx 的性能指标?
- stub_status 模块(基础活跃连接数)
- prometheus + nginx-prometheus-exporter
- key 指标:active connections、accepts、handled、requests、QPS、4xx/5xx 比率
- Nginx 日志如何做切分和不丢失?
access_log /var/log/nginx/access.log main buffer=32k flush=5m;- logrotate 或 nginx -s reopen + mv + kill -USR1
- 你线上遇到过最难的 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 个高级题深入准备真实案例。
有哪几道你觉得最容易被问到,或者想听更详细的配置示例?可以告诉我,我再展开。祝你面试顺利!