2025最新Nginx高频面试题
2025最新Nginx高频面试题
摘要:本文整理了2025年企业高频Nginx面试题,覆盖核心原理、配置优化、安全防护及云原生场景实战,助你轻松应对技术面试!
核心原理篇
1. Nginx的Master-Worker架构优势是什么?
答案:
- 高并发处理:Worker进程独立处理请求,避免单线程阻塞。
- 热升级:通过信号控制实现服务不中断升级(如
kill -USR2
)。 - 资源隔离:Worker进程崩溃不影响整体服务。
2. Nginx如何实现事件驱动模型?
答案:
基于**epoll(Linux)/kqueue(FreeBSD)**异步非阻塞机制,通过事件循环(Event Loop)高效处理海量连接。
# 典型事件配置
events {worker_connections 10240; # 单Worker最大连接数use epoll; # Linux环境使用epollmulti_accept on; # 一次性接受所有新连接
}
3. 解释Nginx的location匹配优先级规则
答案:
优先级从高到低:
=
精确匹配^~
前缀匹配(不检查正则)~
或~*
正则匹配(区分/不区分大小写)- 普通前缀匹配
配置与调优篇
4. 如何实现Nginx动态限流?
答案:
使用limit_req_zone
限制请求速率:
http {limit_req_zone $binary_remote_addr zone=api_limit:10m rate=100r/s;server {location /api/ {limit_req zone=api_limit burst=200 nodelay;proxy_pass http://backend;}}
}
5. 如何通过Nginx提升HTTPS性能?
优化方案:
- 启用HTTP/2(
listen 443 ssl http2
) - 使用TLS 1.3协议
- 开启OCSP Stapling减少证书验证延迟
- 会话复用(
ssl_session_cache shared:SSL:10m;
)
6. 如何排查Nginx高负载问题?
诊断步骤:
top
查看CPU/内存占用ss -s
统计连接状态strace -p <worker_pid>
追踪进程系统调用- 分析
access.log
和error.log
云原生与安全篇
7. 如何在Kubernetes中优化Nginx Ingress?
实战方案:
- 启用动态配置(
nginx.org/mergeable-ingress-types
) - 使用eBPF加速网络数据面
- 配置HPA自动扩缩容
8. 如何防御DDoS攻击?
安全配置:
# 限制单个IP并发连接数
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
limit_conn conn_limit 50;# 封禁异常User-Agent
if ($http_user_agent ~* (Scanner|Bot)) {return 403;
}
高频场景题
9. 如何用Nginx实现灰度发布?
答案:
通过map
指令动态路由:
map $cookie_version $backend {default http://production;"v2" http://canary;
}
server {location / {proxy_pass $backend;}
}
10. Nginx与OpenResty的核心区别是什么?
对比分析:
特性 | Nginx | OpenResty |
---|---|---|
核心能力 | 静态资源处理 | Lua脚本动态扩展 |
适用场景 | 反向代理/CDN | API网关/业务逻辑 |
性能开销 | 低 | 中等(Lua VM) |
性能优化篇
11. 如何通过Nginx实现零拷贝(Zero-Copy)传输?
答案:
启用sendfile
指令,绕过用户空间直接在内核完成文件传输:
http {sendfile on; # 启用零拷贝tcp_nopush on; # 合并数据包减少网络开销tcp_nodelay on; # 禁用Nagle算法
}
适用场景:静态大文件(如视频、ISO镜像)传输效率提升30%+。
12. 如何定位Nginx内存泄漏问题?
诊断工具链:
- Valgrind:检测内存非法访问
- gdb+Python脚本:分析Worker进程堆栈
- jemalloc:替换默认内存分配器监控碎片率
安全防护篇
13. 如何防止Nginx被用作DDoS反射放大器?
关键配置:
# 禁用非必要协议
ssl_protocols TLSv1.2 TLSv1.3;
# 限制客户端header大小
client_header_buffer_size 4k;
large_client_header_buffers 4 16k;
# 关闭非必要模块(如autoindex)
14. 如何实现国密算法(SM2/SM4)HTTPS支持?
操作步骤:
- 编译Nginx时添加
--with-openssl=../tongsuo
(铜锁OpenSSL分支) - 配置证书:
ssl_certificate /path/to/sm2.crt;
ssl_certificate_key /path/to/sm2.key;
ssl_ciphers ECC-SM2-SM4-CBC-SM3;
云原生篇
15. 在Kubernetes中如何实现Nginx Ingress金丝雀发布?
方案对比:
方式 | 配置示例 | 适用场景 |
---|---|---|
Header匹配 | nginx.ingress.kubernetes.io/canary-by-header: "version" | 精准用户分流 |
流量比例 | nginx.ingress.kubernetes.io/canary-weight: "20" | 渐进式发布 |
Cookie识别 | nginx.ingress.kubernetes.io/canary-by-cookie: "canary" | 内部测试 |
16. 如何通过Nginx实现Service Mesh数据面代理?
架构要点:
- 使用Lua脚本动态修改Upstream
- 集成OpenTelemetry实现链路追踪
- 通过gRPC-Web支持微服务通信
location /api/ {grpc_pass grpc://backend-service:9000;grpc_set_header X-Request-ID $request_id;
}
协议与前沿技术篇
17. 如何在Nginx中启用HTTP/3?
编译与配置:
- 使用
--with-http_v3_module
编译参数 - 配置监听端口:
listen 443 quic reuseport;
listen [::]:443 quic reuseport;
add_header Alt-Svc 'h3=":443"; ma=86400';
注意事项:需使用BoringSSL或QUIC兼容的TLS库。
18. Nginx如何支持WebAssembly(Wasm)?
实现路径:
- 通过OpenResty加载Wasm模块
- 使用
proxy_wasm
指令处理请求:
location /wasm/ {proxy_wasm_filter "filter.wasm";proxy_pass http://backend;
}
应用场景:边缘计算、自定义鉴权逻辑。
故障排查篇
19. 502 Bad Gateway错误的完整排查流程
六步定位法:
- 检查上游服务状态(
curl -v http://upstream
) - 查看Nginx错误日志(
error.log
中upstream timed out
) - 确认防火墙规则(
iptables -L -n
) - 验证DNS解析(
dig upstream.domain
) - 测试反向代理配置(
nginx -T
)
20. 如何处理Nginx的惊群效应(Thundering Herd)?
优化方案:
- Linux内核≥3.9时启用
reuseport
:
listen 80 reuseport;
- 调整
accept_mutex
与worker_processes auto;
相关文章:
2025最新Nginx高频面试题
2025最新Nginx高频面试题 摘要:本文整理了2025年企业高频Nginx面试题,覆盖核心原理、配置优化、安全防护及云原生场景实战,助你轻松应对技术面试! 核心原理篇 1. Nginx的Master-Worker架构优势是什么? 答案…...
【Kubernetes】API server 限流 之 maxinflight.go
这个文件实现了一个基于信号量(Channel)的简单限流器。 基础知识 总共有四种channel 带缓冲的channel nonMutatingChan、mutatingChan 都是带缓冲的channel ,这类channel 的特点是: 这允许最多 mutatingLimit /nonMutatingLimit 个请求同时获取令牌并执…...
推荐算法工程师的技术图谱和学习路径
推荐算法工程师的技术图谱和学习路径可以从多个维度进行概述,可以总结如下: 一、技术图谱 推荐算法工程师需要掌握的技术栈主要分为以下几个方面: 数学基础: 微积分、线性代数、概率论与统计学是推荐算法的基础,用于理解模型的数学原理和优化算法。高等数学、最优化理论…...

Milvus高性能向量数据库与大模型结合
Milvus | 高性能向量数据库,为规模而构建Milvus 是一个为 GenAI 应用构建的开源向量数据库。使用 pip 安装,执行高速搜索,并扩展到数十亿个向量。https://milvus.io/zh Milvus 是什么? Milvus 是一种高性能、高扩展性的向量数据…...
轮式机器人在复杂地形中如何选择合适的全局路径规划算法?
已思考完成 收起 嗯,用户问的是轮式机器人在复杂地形中如何选择合适的全局路径规划算法。首先,我需要理解复杂地形可能带来的挑战,比如崎岖的路面、动态障碍物、非结构化环境等等。轮式机器人在这里的运动控制需要考虑地形通过性、稳定性&…...

Metal学习笔记九:光照基础
光和阴影是使场景流行的重要要求。通过一些着色器艺术,您可以突出重要的对象、描述天气和一天中的时间并设置场景的气氛。即使您的场景由卡通对象组成,如果您没有正确地照亮它们,场景也会变得平淡无奇。 最简单的光照方法之一是 Phong 反射模…...

【字符串】最长公共前缀 最长回文子串
文章目录 14. 最长公共前缀解题思路:模拟5. 最长回文子串解题思路一:动态规划解题思路二:中心扩散法 14. 最长公共前缀 14. 最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符…...

Linux提权之详细总结版(完结)
这里是我写了折磨多提权的指令的总结 我这里毫无保留分享给大家哦 首先神魔是提权 我们完整的渗透测试的流程是(个人总结的) 首先提升权限是我们拿到webshell之后的事情,如何拿到webshell,怎末才能拿到webshell,朋友们等我更新,持续更新中,下一篇更新的是windows提权 好了 废…...

week 3 - More on Collections - Lecture 3
一、Motivation 1. Java支持哪种类型的一维数据结构? Java中用于在单一维度中存储数据的数据结构,如arrays or ArrayLists. 2. 如何在Java下创建一维数据结构?(1-dimensional data structure) 定义和初始化这些一…...
Pwntools 的详细介绍、安装指南、配置说明
Pwntools:Python 开源安全工具箱 一、Pwntools 简介 Pwntools 是一个由 Security researcher 开发的 高效 Python 工具库,专为密码学研究、漏洞利用、协议分析和逆向工程设计。它集成了数百个底层工具的功能,提供统一的 Python API 接口&am…...

PLC(电力载波通信)网络机制介绍
1. 概述 1.1 什么是PLC 电力载波通讯即PLC,是英文Power line Carrier的简称。 电力载波是电力系统特有的通信方式,电力载波通讯是指利用现有电力线,通过载波方式将模拟或数字信号进行高速传输的技术。最大特点是不需要重新架设网络…...

Qt监控系统远程回放/录像文件远程下载/录像文件打上水印/批量多线程极速下载
一、前言说明 在做这个功能的时候,着实费了点心思,好在之前做ffmpeg加密解密的时候,已经打通了极速加密保存文件,主要就是之前的类中新增了进度提示信号,比如当前已经处理到哪个position位置,发个信号出来…...
自学微信小程序的第八天
DAY8 1、使用动画API即可完成动画效果的制作,先通过wx.createAnimation()方法获取Animation实例,然后调用Animation实例的方法实现动画效果。 表40:wx.createAnimation()方法的常用选项 选项 类型 说明 duration number 动画持续时间,单位为毫秒,默认值为400毫秒 timing…...

【java】@Transactional导致@DS注解切换数据源失效
最近业务中出现了多商户多租户的逻辑,所以需要分库,项目框架使用了mybatisplus所以我们自然而然的选择了同是baomidou开发的dynamic.datasource来实现多数据源的切换。在使用初期程序运行都很好,但之后发现在调用com.baomidou.mybatisplus.ex…...
003 SpringBoot集成Kafka操作
4.SpringBoot集成Kafka 文章目录 4.SpringBoot集成Kafka1.入门示例2.yml完整配置3.关键配置注释说明1. 生产者优化参数2. 消费者可靠性配置3. 监听器高级特性4. 安全认证配置 4.配置验证方法5.不同场景配置模板场景1:高吞吐日志收集场景2:金融级事务消息…...

Android SystemUI开发(一)
frameworks/base/packages/SystemUI/src/com/android/systemui/SystemUI.java frameworks/base/packages/SystemUI/src/com/android/systemui/SystemUIService.java 关键文件 SystemUI 关键服务 简介 Dependency.class:处理系统依赖关系,提供资源或服…...

C#贪心算法
贪心算法:生活与代码中的 “最优选择大师” 在生活里,我们常常面临各种选择,都希望能做出最有利的决策。比如在超市大促销时,面对琳琅满目的商品,你总想用有限的预算买到价值最高的东西。贪心算法,就像是一…...

Vue程序下载
Vue是一个基于JavaScript(JS)实现的框架,想要使用它,就得先拿到Vue的js文件 Vue官网 Vue2:Vue.js Vue3:Vue.js - 渐进式 JavaScript 框架 | Vue.js 下载并安装vue.js 第一步:打开Vue2官网&a…...

【UCB CS 61B SP24】Lecture 17 - Data Structures 3: B-Trees学习笔记
本文以 2-3-4 树详细讲解了 B 树的概念,逐步分析其操作,并用 Java 实现了标准的 B 树。 1. 2-3 & 2-3-4 Trees 上一节课中讲到的二叉搜索树当数据是随机顺序插入的时候能够使得树变得比较茂密,如下图右侧所示,时间复杂度也就…...

机器学习决策树
一、香农公式 熵: 信息增益: 信息增益信息熵-条件熵 前者是初始信息熵大小,后者是因为条件加入后带来的确定性增加 信息增益表示得知特征X的信息而使得类Y的信息的不确定性减少的程度 信息增益越大说明影响越大 二、代码 ""&…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...

遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...

排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...

【java面试】微服务篇
【java面试】微服务篇 一、总体框架二、Springcloud(一)Springcloud五大组件(二)服务注册和发现1、Eureka2、Nacos (三)负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...

数据分析六部曲?
引言 上一章我们说到了数据分析六部曲,何谓六部曲呢? 其实啊,数据分析没那么难,只要掌握了下面这六个步骤,也就是数据分析六部曲,就算你是个啥都不懂的小白,也能慢慢上手做数据分析啦。 第一…...

Tauri2学习笔记
教程地址:https://www.bilibili.com/video/BV1Ca411N7mF?spm_id_from333.788.player.switch&vd_source707ec8983cc32e6e065d5496a7f79ee6 官方指引:https://tauri.app/zh-cn/start/ 目前Tauri2的教程视频不多,我按照Tauri1的教程来学习&…...
python数据结构和算法(1)
数据结构和算法简介 数据结构:存储和组织数据的方式,决定了数据的存储方式和访问方式。 算法:解决问题的思维、步骤和方法。 程序 数据结构 算法 算法 算法的独立性 算法是独立存在的一种解决问题的方法和思想,对于算法而言&a…...