博客
关于我
Nginx面试三连问:Nginx如何工作?负载均衡策略有哪些?如何限流?
阅读量:794 次
发布时间:2023-02-15

本文共 3304 字,大约阅读时间需要 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压缩

    开启步骤

  • 修改配置文件:
    # 启用 gzipgzip 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 的限流策略,确保服务器的稳定性。

    转载地址:http://fyjfk.baihongyu.com/

    你可能感兴趣的文章
    nginx 常用指令配置总结
    查看>>
    Nginx 常用配置清单
    查看>>
    nginx 常用配置记录
    查看>>
    nginx 开启ssl模块 [emerg] the “ssl“ parameter requires ngx_http_ssl_module in /usr/local/nginx
    查看>>
    Nginx 我们必须知道的那些事
    查看>>
    Nginx 源码完全注释(11)ngx_spinlock
    查看>>
    Nginx 的 proxy_pass 使用简介
    查看>>
    Nginx 的 SSL 模块安装
    查看>>
    Nginx 的优化思路,并解析网站防盗链
    查看>>
    Nginx 的配置文件中的 keepalive 介绍
    查看>>
    Nginx 相关介绍(Nginx是什么?能干嘛?)
    查看>>
    Nginx 知识点一网打尽:动静分离、压缩、缓存、跨域、高可用、性能优化...
    查看>>
    nginx 禁止以ip形式访问服务器
    查看>>
    NGINX 端口负载均衡
    查看>>
    Nginx 结合 consul 实现动态负载均衡
    查看>>
    Nginx 负载均衡与权重配置解析
    查看>>
    Nginx 负载均衡详解
    查看>>
    Nginx 负载均衡配置详解
    查看>>
    nginx 配置 单页面应用的解决方案
    查看>>
    nginx 配置dist 加上跨域配置
    查看>>