
Nginx面试三连问:Nginx如何工作?负载均衡策略有哪些?如何限流?
正向/反向代理 负载均衡与分流 虚拟主机(绑定 host) 跨平台支持,配置简单 高并发连接能力,内存占用小 非阻塞异步处理,资源消耗低 成本效益高 单线程异步模型 epoll模型 高效的事件处理机制 启动并管理工作进程 接收信号并分配任务 监控工作进程状态 接收客户端连接 解析请求并处理 生成响应并发送 启动: 停止: 重启: 重载配置: 查看版本: 修改配置文件: Nginx 轻量级,资源占用小 异步处理能力强 支持负载均衡与反向代理 轮询(round_robin):按时间顺序分配请求 IP 哈希(ip_hash):按 IP 分配请求 最少连接(least_conn):优先分配连接较少的服务器 权重(weight):根据权重分配请求
发布日期:2025-04-20 23:39:50
浏览次数:5
分类:精选文章
本文共 3361 字,大约阅读时间需要 11 分钟。
Nginx入门及实践指南
1. 什么是Nginx,谈谈个人都理解,项目中是否用到,为什么要用,有什么优点?
Nginx 是一款高性能的 Web 服务器和反向代理服务器,支持 HTTP、HTTPS、SMTP、POP3 和 IMAP 协议。它广泛应用于 Web 服务、静态资源托管、反向代理以及负载均衡等场景。
主要功能
优点
2. 正向代理与反向代理的区别
正向代理
位于客户端与原始服务器之间,客户端请求代理转发至原始服务器,代理与客户端处于同一局域网。
反向代理
接收网络连接请求,转发至内部服务器,代理与原始服务器处于同一局域网。
3. Nginx如何处理HTTP请求?
处理机制
具体流程
- Nginx启动后,主进程(master)监听端口,生成多个工作进程(worker)。
- 每个工作进程独立处理客户端连接,采用异步非阻塞方式。
- 当 IO 操作完成时,触发相应的处理逻辑。
4. master与worker的工作原理
master的职责
worker的职责
单线程优势
- 减少 CPU 上下文切换
- 更高的并发处理能力
5. 常用命令
启动与管理
nginx
nginx -s stop
或 nginx -s quit
nginx -s reload
或 service 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 单线程异步,Apache 多进程同步。
- Nginx 提供更多反向代理功能。
9. Nginx负载均衡策略
默认策略
高级策略
- 可通过插件扩展,如
nginx-ratelimiting-module
10. 动静态资源分离
背景
- 动态资源与静态资源分离,提升访问效率
- 静态资源通过 CDN 加速
实现方法
- 静态资源存放在 Nginx 的
root
或alias
目录 - 动态资源通过
proxy_pass
转发
11. ngx_http_upstream_module模块
功能
- 将多个服务器定义为服务器组
- 支持多种传递方式:
fastcgi
、proxy
、uwsgi
等
示例
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. 白名单限流
- 结合
geo
和map
模块 - 示例:
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 的限流策略,确保服务器的稳定性。
发表评论
最新留言
很好
[***.229.124.182]2025年04月12日 12时02分33秒
关于作者

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