Nginx面试三连问:Nginx如何工作?负载均衡策略有哪些?如何限流?
发布日期:2025-04-20 23:39:50 浏览次数:5 分类:精选文章

本文共 3361 字,大约阅读时间需要 11 分钟。

Nginx入门及实践指南

1. 什么是Nginx,谈谈个人都理解,项目中是否用到,为什么要用,有什么优点?

Nginx 是一款高性能的 Web 服务器和反向代理服务器,支持 HTTP、HTTPS、SMTP、POP3 和 IMAP 协议。它广泛应用于 Web 服务、静态资源托管、反向代理以及负载均衡等场景。

主要功能

  • 正向/反向代理
  • 负载均衡与分流
  • 虚拟主机(绑定 host)
  • 优点

  • 跨平台支持,配置简单
  • 高并发连接能力,内存占用小
  • 非阻塞异步处理,资源消耗低
  • 成本效益高
  • 2. 正向代理与反向代理的区别

    正向代理

    位于客户端与原始服务器之间,客户端请求代理转发至原始服务器,代理与客户端处于同一局域网。

    反向代理

    接收网络连接请求,转发至内部服务器,代理与原始服务器处于同一局域网。

    3. Nginx如何处理HTTP请求?

    处理机制

  • 单线程异步模型
  • epoll模型
  • 高效的事件处理机制
  • 具体流程

    • Nginx启动后,主进程(master)监听端口,生成多个工作进程(worker)。
    • 每个工作进程独立处理客户端连接,采用异步非阻塞方式。
    • 当 IO 操作完成时,触发相应的处理逻辑。

    4. master与worker的工作原理

    master的职责

  • 启动并管理工作进程
  • 接收信号并分配任务
  • 监控工作进程状态
  • worker的职责

  • 接收客户端连接
  • 解析请求并处理
  • 生成响应并发送
  • 单线程优势

    • 减少 CPU 上下文切换
    • 更高的并发处理能力

    5. 常用命令

    启动与管理

  • 启动:nginx
  • 停止:nginx -s stopnginx -s quit
  • 重启:nginx -s reloadservice nginx reload
  • 重载配置:nginx -c /path/to/nginx.conf
  • 查看版本:nginx -v
  • 配置管理

    • 通过 -c 选项加载外部配置文件
    • 支持热重载,无需重启服务器

    6. 500、502、503、504错误的区别

    500(Internal Server Error)

    • 服务器内部错误,常见于脚本或编程语言错误

    502(Bad Gateway)

    • 网关错误,可能因服务器响应过慢或连接过多

    503(Service Temporarily Unavailable)

    • 服务器暂时不可用,可能是超载或维护期间

    504(Gateway Timeout)

    • 代理超时,程序执行时间超过 Nginx 配置的最大限制

    7. Nginx压缩

    开启步骤

  • 修改配置文件:
    # 启用 gzip
    gzip off;
    # 压缩文件大小小于 1KB 的文件
    gzip_min_length 1k;
    # 设置压缩级别(1-9)
    gzip_comp_level 1;
    # 允许压缩的文件类型
    gzip_types text/plain application/javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
  • 压缩优势

    • 减少带宽占用
    • 提高传输效率
    • 增加 CPU 加负担

    8. Nginx与Apache/Tomcat的区别

    Web服务器 vs Servlet容器

    • Nginx 和 Apache 是 Web 服务器,仅提供静态资源服务。
    • Tomcat 是 Servlet 容器,支持 JSP 解析。

    对比优势

  • Nginx 轻量级,资源占用小
  • 异步处理能力强
  • 支持负载均衡与反向代理
  • 具体区别

    • Nginx 单线程异步,Apache 多进程同步。
    • Nginx 提供更多反向代理功能。

    9. Nginx负载均衡策略

    默认策略

  • 轮询(round_robin):按时间顺序分配请求
  • IP 哈希(ip_hash):按 IP 分配请求
  • 最少连接(least_conn):优先分配连接较少的服务器
  • 权重(weight):根据权重分配请求
  • 高级策略

    • 可通过插件扩展,如 nginx-ratelimiting-module

    10. 动静态资源分离

    背景

    • 动态资源与静态资源分离,提升访问效率
    • 静态资源通过 CDN 加速

    实现方法

    • 静态资源存放在 Nginx 的 rootalias 目录
    • 动态资源通过 proxy_pass 转发

    11. ngx_http_upstream_module模块

    功能

    • 将多个服务器定义为服务器组
    • 支持多种传递方式:fastcgiproxyuwsgi

    示例

    http {
    proxy_cache_path /var/cache/nginx/proxy_cache levels=1:2:2 keys_zone=proxycache:20m inactive=120s max_size=1g;
    upstream mysqlsrvs {
    ip_hash;
    server 172.18.99.1:80 weight=2;
    server 172.18.99.2:80;
    server 172.18.99.3:80 backup;
    }
    server {
    server_name www.a.com;
    proxy_cache proxycache;
    proxy_cache_key $request_uri;
    proxy_cache_valid 200 302 301 1h;
    proxy_cache_valid any 1m;
    location / {
    proxy_pass http://mysqlsrvs;
    }
    }
    }

    12. 限流方法

    1. 控制速率

    • 使用 limit_req_zone 模块(漏桶算法)
    • 示例:
      http {
      limit_req_zone $binary_remote_addr zone=myLimit:10m rate=5r/s;
      server {
      location / {
      limit_req zone=myLimit;
      rewrite / http://www.hac.cn permanent;
      }
      }
      }
    • burst 参数控制突发流量

    2. 控制并发连接数

    • 使用 limit_conn_zone 模块
    • 示例:
      http {
      limit_conn_zone $binary_remote_addr zone=perip:10m;
      limit_conn_zone $server_name zone=perserver:10m;
      server {
      location / {
      limit_conn perip 10;
      limit_conn perserver 100;
      }
      }
      }

    3. 白名单限流

    • 结合 geomap 模块
    • 示例:
      geo $limit default 1 {
      10.0.0.0/8 0;
      192.168.0.0/10 0;
      81.56.0.35 0;
      }
      map $limit $limit_key {
      0 "";
      1 $binary_remote_addr;
      }
      http {
      limit_req_zone $limit_key zone=myRateLimit:10m rate=10r/s;
      }

    4. 下载速率控制

    • 使用 limit_rate 指令
    • 示例:
      location /flv {
      flv;
      limit_rate_after 500m;
      limit_rate 50k;
      }

    通过以上方法,可以根据实际需求合理配置 Nginx 的限流策略,确保服务器的稳定性。

    上一篇:Nginx高可用集群构建(Keepalived+Haproxy+Nginx)
    下一篇:Nginx限流限速艺术揭秘:从原理到实战,轻松实现服务流量控制

    发表评论

    最新留言

    很好
    [***.229.124.182]2025年04月12日 12时02分33秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章