当前位置: 首页 > news >正文

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匹配优先级规则

答案
优先级从高到低:

  1. = 精确匹配
  2. ^~ 前缀匹配(不检查正则)
  3. ~~* 正则匹配(区分/不区分大小写)
  4. 普通前缀匹配

配置与调优篇

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/2listen 443 ssl http2
  • 使用TLS 1.3协议
  • 开启OCSP Stapling减少证书验证延迟
  • 会话复用(ssl_session_cache shared:SSL:10m;

6. 如何排查Nginx高负载问题?

诊断步骤

  1. top查看CPU/内存占用
  2. ss -s统计连接状态
  3. strace -p <worker_pid>追踪进程系统调用
  4. 分析access.logerror.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的核心区别是什么?

对比分析

特性NginxOpenResty
核心能力静态资源处理Lua脚本动态扩展
适用场景反向代理/CDNAPI网关/业务逻辑
性能开销中等(Lua VM)

性能优化篇

11. 如何通过Nginx实现零拷贝(Zero-Copy)传输?

答案
启用sendfile指令,绕过用户空间直接在内核完成文件传输:

http {sendfile on;          # 启用零拷贝tcp_nopush on;       # 合并数据包减少网络开销tcp_nodelay on;      # 禁用Nagle算法
}

适用场景:静态大文件(如视频、ISO镜像)传输效率提升30%+。


12. 如何定位Nginx内存泄漏问题?

诊断工具链

  1. Valgrind:检测内存非法访问
  2. gdb+Python脚本:分析Worker进程堆栈
  3. 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支持?

操作步骤

  1. 编译Nginx时添加--with-openssl=../tongsuo(铜锁OpenSSL分支)
  2. 配置证书:
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数据面代理?

架构要点

  1. 使用Lua脚本动态修改Upstream
  2. 集成OpenTelemetry实现链路追踪
  3. 通过gRPC-Web支持微服务通信
location /api/ {grpc_pass grpc://backend-service:9000;grpc_set_header X-Request-ID $request_id;
}

协议与前沿技术篇

17. 如何在Nginx中启用HTTP/3?

编译与配置

  1. 使用--with-http_v3_module编译参数
  2. 配置监听端口:
listen 443 quic reuseport;  
listen [::]:443 quic reuseport;  
add_header Alt-Svc 'h3=":443"; ma=86400';  

注意事项:需使用BoringSSL或QUIC兼容的TLS库。


18. Nginx如何支持WebAssembly(Wasm)?

实现路径

  1. 通过OpenResty加载Wasm模块
  2. 使用proxy_wasm指令处理请求:
location /wasm/ {proxy_wasm_filter "filter.wasm";proxy_pass http://backend;
}

应用场景:边缘计算、自定义鉴权逻辑。


故障排查篇

19. 502 Bad Gateway错误的完整排查流程

六步定位法

  1. 检查上游服务状态(curl -v http://upstream
  2. 查看Nginx错误日志(error.logupstream timed out
  3. 确认防火墙规则(iptables -L -n
  4. 验证DNS解析(dig upstream.domain
  5. 测试反向代理配置(nginx -T

20. 如何处理Nginx的惊群效应(Thundering Herd)?

优化方案

  • Linux内核≥3.9时启用reuseport
listen 80 reuseport;  
  • 调整accept_mutexworker_processes auto;

相关文章:

2025最新Nginx高频面试题

2025最新Nginx高频面试题 摘要&#xff1a;本文整理了2025年企业高频Nginx面试题&#xff0c;覆盖核心原理、配置优化、安全防护及云原生场景实战&#xff0c;助你轻松应对技术面试&#xff01; 核心原理篇 1. Nginx的Master-Worker架构优势是什么&#xff1f; 答案&#xf…...

【Kubernetes】API server 限流 之 maxinflight.go

这个文件实现了一个基于信号量(Channel)的简单限流器。 基础知识 总共有四种channel 带缓冲的channel nonMutatingChan、mutatingChan 都是带缓冲的channel &#xff0c;这类channel 的特点是&#xff1a; 这允许最多 mutatingLimit /nonMutatingLimit 个请求同时获取令牌并执…...

推荐算法工程师的技术图谱和学习路径

推荐算法工程师的技术图谱和学习路径可以从多个维度进行概述,可以总结如下: 一、技术图谱 推荐算法工程师需要掌握的技术栈主要分为以下几个方面: 数学基础: 微积分、线性代数、概率论与统计学是推荐算法的基础,用于理解模型的数学原理和优化算法。高等数学、最优化理论…...

Milvus高性能向量数据库与大模型结合

Milvus | 高性能向量数据库&#xff0c;为规模而构建Milvus 是一个为 GenAI 应用构建的开源向量数据库。使用 pip 安装&#xff0c;执行高速搜索&#xff0c;并扩展到数十亿个向量。https://milvus.io/zh Milvus 是什么&#xff1f; Milvus 是一种高性能、高扩展性的向量数据…...

轮式机器人在复杂地形中如何选择合适的全局路径规划算法?

已思考完成 收起 嗯&#xff0c;用户问的是轮式机器人在复杂地形中如何选择合适的全局路径规划算法。首先&#xff0c;我需要理解复杂地形可能带来的挑战&#xff0c;比如崎岖的路面、动态障碍物、非结构化环境等等。轮式机器人在这里的运动控制需要考虑地形通过性、稳定性&…...

Metal学习笔记九:光照基础

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

【字符串】最长公共前缀 最长回文子串

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

Linux提权之详细总结版(完结)

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

week 3 - More on Collections - Lecture 3

一、Motivation 1. Java支持哪种类型的一维数据结构&#xff1f; Java中用于在单一维度中存储数据的数据结构&#xff0c;如arrays or ArrayLists. 2. 如何在Java下创建一维数据结构&#xff1f;&#xff08;1-dimensional data structure&#xff09; 定义和初始化这些一…...

Pwntools 的详细介绍、安装指南、配置说明

Pwntools&#xff1a;Python 开源安全工具箱 一、Pwntools 简介 Pwntools 是一个由 Security researcher 开发的 高效 Python 工具库&#xff0c;专为密码学研究、漏洞利用、协议分析和逆向工程设计。它集成了数百个底层工具的功能&#xff0c;提供统一的 Python API 接口&am…...

PLC(电力载波通信)网络机制介绍

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

Qt监控系统远程回放/录像文件远程下载/录像文件打上水印/批量多线程极速下载

一、前言说明 在做这个功能的时候&#xff0c;着实费了点心思&#xff0c;好在之前做ffmpeg加密解密的时候&#xff0c;已经打通了极速加密保存文件&#xff0c;主要就是之前的类中新增了进度提示信号&#xff0c;比如当前已经处理到哪个position位置&#xff0c;发个信号出来…...

自学微信小程序的第八天

DAY8 1、使用动画API即可完成动画效果的制作,先通过wx.createAnimation()方法获取Animation实例,然后调用Animation实例的方法实现动画效果。 表40:wx.createAnimation()方法的常用选项 选项 类型 说明 duration number 动画持续时间,单位为毫秒,默认值为400毫秒 timing…...

【java】@Transactional导致@DS注解切换数据源失效

最近业务中出现了多商户多租户的逻辑&#xff0c;所以需要分库&#xff0c;项目框架使用了mybatisplus所以我们自然而然的选择了同是baomidou开发的dynamic.datasource来实现多数据源的切换。在使用初期程序运行都很好&#xff0c;但之后发现在调用com.baomidou.mybatisplus.ex…...

003 SpringBoot集成Kafka操作

4.SpringBoot集成Kafka 文章目录 4.SpringBoot集成Kafka1.入门示例2.yml完整配置3.关键配置注释说明1. 生产者优化参数2. 消费者可靠性配置3. 监听器高级特性4. 安全认证配置 4.配置验证方法5.不同场景配置模板场景1&#xff1a;高吞吐日志收集场景2&#xff1a;金融级事务消息…...

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&#xff1a;处理系统依赖关系&#xff0c;提供资源或服…...

C#贪心算法

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

Vue程序下载

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

【UCB CS 61B SP24】Lecture 17 - Data Structures 3: B-Trees学习笔记

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

机器学习决策树

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

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...