Nginx常见面试题以及答案

[复制链接]
发表于 2026-10-3 13:48:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

一、基础概念题

1. Nginx 是什么?主要优势

Nginx 是开源的高性能 HTTP 服务器 + 反向代理,也常做负载均衡。优势:用极少资源扛高并发长连接、可靠性高、支持热部署、配置灵活、负载均衡与缓存能力强。

2. 静态内容和动态内容怎么处理

Nginx 天生擅长静态内容(HTML/CSS/JS/图片)直接以 HTTP 响应返回;动态请求则反向代理给后端(Tomcat、uWSGI、Node 等)处理,Nginx 只做转发。

location /static/ {
    root /data/www;          # 直接读文件,不走后端
    expires 7d;
}
location / {
    proxy_pass http://127.0.0.1:8080;
}

3. 反向代理是什么

反向代理:代理服务器接收客户端请求 → 转发给内部的一台或多台服务器 → 把后端响应返回客户端。对客户端来说它不知道后端是谁。用途:负载均衡、SSL 终结、缓存、压缩、隐藏后端拓扑。

location / {
    proxy_pass http://backend;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

4. 负载均衡怎么实现

用 upstream 定义服务器组,配策略分请求:

upstream backend {
    least_conn;                       # 最少连接
    # round_robin(默认轮询)
    # ip_hash;                        # 按客户端 IP 哈希,做会话保持
    server 10.0.0.1:8080 weight=2 max_fails=3 fail_timeout=30s;
    server 10.0.0.2:8080 weight=1 max_fails=3 fail_timeout=30s;
    server 10.0.0.3:8080 backup;      # 备机,前面的都挂了才上
}

5. location 指令怎么匹配

用于按请求 URI 决定走哪套配置。匹配规则有优先级:

  1. = 精确匹配(最优先)
  2. ^~ 前缀匹配,正则不再走
  3. 正则 ~ / ~*
  4. 最长前缀 /
location = /login        { proxy_pass http://backend; }   # 精确
location ^~ /static/     { root /data; }                  # 前缀,跳过正则
location ~* \.php$       { fastcgi_pass unix:/run/php.sock; }
location /               { proxy_pass http://backend; }   # 兜底

6. 配置文件结构

主配置 nginx.conf 是树状结构:

  • events 块:连接处理相关(worker_connections、use epoll)。
  • http 块:HTTP 服务相关——server 列表、upstream、MIME、日志日志、压缩、缓存。
  • mail 块:邮件代理(可选)。
  • server 块 must 嵌在 http 里,一个 server 就是一个虚拟主机。

7. 怎么启用 HTTPS

server {
    listen 443 ssl;
    server_name www.qidao.com;
    ssl_certificate     /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
}

8. 缓存怎么配

减少后端压力:proxy_cache_path 定义缓存盘与策略,location 里 proxy_cache 启用。

http {
  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_key $scheme$request_method$host$request_uri;
      proxy_cache_valid 200 304 10m;
      proxy_cache_valid 404 1m;
    }
  }
}

9. 性能优化手段

  • 调 worker_processes auto 与 worker_connections(最大并发 ≈ worker × connections)。
  • 开 gzip 压缩减少传输量。
  • 静态文件设 expires / Cache-Control 走浏览器缓存。
  • keepalive 长连接减少 TCP 握手开销。
  • SSL 优化:ssl_session_cache、会话复用。
  • 开 HTTP/2(listen 443 ssl http2)、反向代理到后端用长连接 proxy_http_version 1.1。
  • 裁剪没用到的模块省内存;持续监控监控定位瓶颈。
worker_processes auto;
events { worker_connections 10240; }
http {
  gzip on;
  gzip_min_length 1k;
  gzip_types text/plain text/css application/json application/javascript;
  sendfile on;
  tcp_nopush on;
  keepalive_timeout 65;
}

10. Nginx 怎么处理一个请求

基于事件驱动、非阻塞。请求先由 master 进程接收(master 不处理业务,负责读配置、管 worker),再分发给 worker 进程;worker 监听端口、accept、处理、返回。一个 worker 同时处理多个连接靠的是 epoll 事件循环,不是多开线程。

11. Master-Worker 架构

  • Master:读取校验配置、管理 worker(拉起/重建)、热加载靠 master 重新读配置并平滑替换 worker。
  • Worker:真正处理请求,多 worker 利用多核,且彼此隔离——一个 worker 挂了不影响其他,稳定性好。

热部署命令:nginx -s reload(走 master 重新加载配置)。

12. IP 黑名单

location / {
    deny  192.168.1.100;
    deny  10.0.0.0/8;
    allow all;
}

注意顺序敏感:匹配到就停,allow all 写在前面会放行后面的 deny。

13. 怎么看配置错在哪

nginx -t                 # 语法检查
nginx -t -c /path/nginx.conf
nginx -V                 # 看编译了哪些模块
error_log /var/log/nginx/error.log warn;

14. 怎么防 CC / DDoS

  • limit_req_zone 限制请求速率(漏桶)。
  • limit_conn_zone 限制单个 IP 并发连接数。
  • 系统层防火墙(iptables/nftables)拦异常流量。
  • limit_req_status 429 让超限返回 429 而不是 503。
  • 接 fail2ban 把反复触发的 IP 动态拉黑;有条件的上一层和 WAF / CDN。
http {
  limit_req_zone $binary_remote_addr zone=req:10m rate=10r/s;
  limit_conn_zone $binary_remote_addr zone=conn:10m;
  server {
    location /api/ {
      limit_req zone=req burst=20 nodelay;
      limit_conn conn 20;
      proxy_pass http://backend;
    }
  }
}

15. Nginx vs Apache

维度NginxApache
并发模型事件驱动、异步非阻塞,内存占用低每请求一线程/进程,高并发吃内存
静态资源极快,原生强项一般
动态内容需反代给后端mod_php / mod_perl 内嵌,可直出
.htaccess不支持(性能取舍)支持,共享主机场景方便
模块生态够用,部分需编译进模块极丰富,文档齐全
定位反向代理 / 网关 / 静态层传统托管 / 复杂 .htaccess 场景

结论:高并发、网关、静态层用 Nginx;需要 .htaccess、大量内置模块或传统 LAMP 托管,Apache 仍有优势。生产常见做法是Nginx 前置做静态与反代,Apache/Tomcat 在后。

二、进阶方向(面试常延伸)

  • 高级调优:worker 数量、缓冲区大小(client_body_buffer_size、proxy_buffer_size)、open_file_cache。
  • 安全:TLS 配置、安全响应头(X-Frame-Options、X-Content-Type-Options、CSP)、限定访问路径。
  • 排障:看 access_log / error_log,用 stub_status 模块看活跃连接与请求数。
  • 模块:第三方模块怎么编进 Nginx、--add-module 的用法。
  • 高可用:Keepalived + 虚拟 IP 做双机,或直接用云负载均衡。
  • 容器与微服务:Ingress Controller、服务网格里的网关角色。
  • 动态配置:Nginx Plus 的 API、或 Consul-template / nginx-proxy 之类开源方案实现不 reload 生效。
  • CI/CD:配置模板化 + nginx -t 门禁 + 灰度 reload。
  • 场景题:给你一个业务(比如秒杀),现场设计一个 Nginx 配置方案(限流 + 缓存 + 超时 + 降级)。

三、面试加分的小结论

  • 反向代理 ≠ 正向代理:反代客户端不知道后端;正代是客户端自己配的、替客户端去访问外网。
  • worker 数一般设 auto(≈CPU 核数);worker_connections 要配合 ulimit -n,否则会撞文件描述符上限。
  • reload 不断连:worker 处理完旧连接才退出,所以 reload 是平滑的——这是 Nginx 敢热更新的底气。
  • 502 vs 504:502 是后端(upstream)拒绝连接,504 是后端超时没响应,看 proxy_pass 指向的目标就能判断方向。

小结

Nginx 的面试主线就三条:架构(master 管 worker、事件驱动非阻塞、热 reload)、配置(http/server/location 三层 + upstream + 缓存/限流)、对比(与 Apache 的并发模型差异)。回答时别只背定义,能顺手写一段完整的 upstream + location + limit_req 配置,比说十个概念都管用。

qidao123.com企服评测-应用市场 编辑提示

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表