Skip to content

面试题蒸馏卡:Nginx

问题:Nginx 是什么?为什么能高并发?location 匹配优先级?负载均衡策略?反向代理怎么做?

高频问题与标准答

1. Nginx 是什么?有什么特点?

开源高性能 Web 服务器 + 反向代理服务器。特点:高并发(5w 连接)、事件驱动异步非阻塞、内存占用小、模块化、热部署平滑升级、高可靠(可数月不重启)。

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

  • 事件驱动 + 异步非阻塞(类似 Node.js),不像 Apache 每连接一线程。
  • master/worker 多进程:master 管管理,worker 处理请求(数量 = CPU 核数)。
  • 并发上限 ≈ worker_processes × worker_connections

3. Nginx 有哪些应用场景?

① 静态资源服务;② 反向代理(缓存 + 负载均衡);③ API 服务(OpenResty = Nginx + Lua)。

4. 正向代理和反向代理的区别?

  • 正向代理:代理客户端,客户端知道目标服务器(如翻墙,帮你访问外网)。
  • 反向代理:代理服务端,客户端只知道 Nginx,不知道后端真实服务器(如 Nginx 转发到 Tomcat 集群)。

5. location 匹配优先级?

=(精确)> ^~(前缀命中即停)> ~(正则区分大小写)> ~*(正则不区分)> 无符号前缀。

6. root 和 alias 的区别?

  • root:路径与 URI 叠加root /opt/static + /image/1.png/opt/static/image/1.png)。
  • alias:只取定义路径替换(只能 location 中,末尾加 /)。

7. proxy_pass 带 / 和不带 / 的区别?

不带 / 透传完整 URI(/bbs/abc.html → 上游收 /bbs/abc.html);带 / 去掉 location 前缀(→ 上游收 /abc.html)。

8. Nginx 负载均衡策略有哪些?

轮询(默认)/ weight 加权 / ip_hash(同 IP 同后端,session 保持)/ least_conn(最少连接)/ least_time(最短响应)/ random / hash $request_uri(同 URI 同后端)。

9. Nginx 怎么做反向代理缓存?

proxy_cache_path(路径 + keys_zone + inactive)→ proxy_cache 启用 → proxy_cache_valid 状态码 + 时长 → proxy_cache_key 缓存 key;响应头 upstream_cache_status 显示 HIT/MISS。

10. 怎么做健康检查和故障转移?

  • 被动检查:max_fails=N + fail_timeout=time,失败 N 次判定不可用一段时间。
  • backup 备份节点(其他都挂才启用)、down 手动下线。

追问链

  1. Nginx 和 Apache 区别? Nginx 事件驱动异步非阻塞(高并发、省内存);Apache 同步多进程/多线程(稳定但并发弱)。高并发选 Nginx,动态处理常 Nginx + Apache/Tomcat 组合。
  2. Nginx 和 Tomcat 区别? Tomcat 是 Servlet 容器(跑 Java),Nginx 是网关/静态层;通常 Nginx 反代 Tomcat。
  3. 如何保持 session? ip_hash(同 IP 同后端)或共享 session 存储(Redis),或 JWT/token 无状态。
  4. 如何配置 HTTPS? listen 443 ssl + ssl_certificate + ssl_certificate_key
  5. 如何限流? limit_req(请求速率,漏桶)+ limit_conn(并发连接数)。
  6. 如何做动静分离? location ~* \.(jpg|png|css|js)$ 匹配静态 → root 静态目录;动态请求 proxy_pass 到后端。

常见误解

  • ❌ "Nginx 是 Java 应用服务器" —— 它是网关/静态/反代,Tomcat 才是 Servlet 容器。
  • ❌ "负载均衡默认 ip_hash" —— 默认轮询
  • ❌ "热重启用 restart" —— 用 reload 平滑重载,restart 会中断服务。
  • ❌ "alias 和 root 一样" —— alias 替换不叠加,且末尾要加 /

关联

最近更新