全部学科
Python全栈
python
NodeJS全栈
nodejs

NGINX高级技能认证测试

20 题 75 分钟 难度:★★★

考察知识点

  • Nginx 模块架构与生命周期(Handler/Filter/Load-balancer)
  • 模块配置指令解析与钩子函数注册
  • 内存池管理与核心数据结构(ngx_pool_t/ngx_str_t/ngx_array_t)
  • 事件驱动与异步 I/O 模型
  • 模块编译集成与变量系统
  • 灰度发布策略与流量控制
  • 高并发场景下的缓冲区与共享内存优化
  • 操作系统内核参数协同调优
💡 参考答案在文末
判断题
1

在高并发场景下,Nginx 的 worker_connections 配置必须与操作系统的文件描述符限制(ulimit -n)和网络参数(如 somaxconn)配合调优,否则即使 Nginx 配置支持高并发,实际性能也会受限。()

A

B

单选题
2

关于 Nginx 内存池 ngx_pool_t,以下说法正确的是?

A

每次调用 ngx_palloc 都会向操作系统申请新的内存块

B

ngx_pool_t 支持单独释放某一块通过 ngx_palloc 分配的内存

C

ngx_pool_t 中的内存只能通过销毁整个内存池来统一释放

D

ngx_pool_t 使用引用计数机制管理内存块的释放

3

在 Nginx 高并发场景中,以下哪个功能使用了共享内存(shared memory)?

A

proxy_cache 缓存数据存储

B

limit_req_zone 限流区域

C

access_log 日志文件

D

error_log 错误日志

4

以下关于 Keepalived 和 VRRP 协议的说法,错误的是?

A

VRRP(Virtual Router Redundancy Protocol)用于实现路由器/服务器的冗余备份

B

Keepalived 通过 VRRP 协议在多台服务器之间浮动 VIP(虚拟 IP)

C

Keepalived 的主备切换需要人工干预才能完成

D

Keepalived 可以通过健康检查脚本检测服务状态

5

以下关于 Nginx 核心数据结构的说法,正确的是?

A

ngx_array_t 是动态数组,支持随机访问,扩容时需要复制全部元素到新内存区域

B

ngx_list_t 是双向链表,每个元素单独分配内存,不支持随机访问

C

ngx_hash_t 支持动态扩容,当冲突增多时会自动 rehash

D

ngx_str_t 在 Nginx 中仅用于存储配置指令的名称

6

Nginx 模块的生命周期不包括以下哪个阶段?

A

配置解析阶段(NGX_HTTP_MODULE 的 create/merge 配置函数)

B

初始化阶段(init_module / init_process)

C

请求处理阶段(handler / filter / access / content)

D

数据库连接阶段(database_connect)

7

以下关于 Nginx 健康检查机制的说法,最适合用于灰度发布场景的是?

A

被动健康检查,根据请求失败情况自动标记后端不可用

B

主动健康检查,定期发送探测请求并根据响应判断后端状态

C

仅依靠 max_fails 和 fail_timeout 参数进行判断

D

不启用任何健康检查,完全依赖轮询分配

8

在 Nginx 模块编译集成中,关于 --add-module 静态编译和 load_module 动态加载的区别,以下说法正确的是?

A

静态编译的模块在 Nginx 启动时加载,动态模块可以在运行时通过配置文件加载

B

动态模块不需要与 Nginx 主程序使用相同的编译选项和版本

C

使用 --add-module 编译的模块无法在运行时卸载

D

load_module 指令必须在配置文件的顶层(main 上下文)使用

9

某业务需要将新版本逐步发布给 10% 的用户,且要求同一用户在整个灰度期间始终访问同一版本。以下哪种方案最优?

A

使用 upstream 的 weight 参数设置新旧后端权重为 1:9,配合 ip_hash 实现

B

使用 split_clients 模块根据用户 IP 哈希将 10% 流量导向新版本 upstream

C

使用 map 指令配合 $cookie_user_group Cookie 将特定用户路由到新版本

D

使用 least_conn 负载均衡算法,让新版本后端自然承载约 10% 的请求

10

在 Nginx 模块开发中,以下关于 ngx_command_t 结构体的说法,正确的是?

A

ngx_command_t 的 set 回调函数指针用于指定该指令的取值处理函数,所有指令必须提供

B

ngx_command_t 的 type 字段仅用于指定指令出现在哪个配置块(main/srv/loc)

C

offset 字段用于指定将解析后的值存储到配置结构体的哪个偏移位置

D

conf 字段的值由 Nginx 框架自动计算,模块开发者无需关心

多选题
11

关于 Nginx 的 Filter 模块机制,以下说法正确的有?

A

Header Filter 在响应头发送前执行,所有 Header Filter 以链表形式组织,按注册顺序依次调用

B

Body Filter 在响应体数据发送时执行,可以修改、缓存或拦截响应体数据

C

Filter 函数返回 NGX_ERROR 时,Nginx 会跳过后续所有 Filter 直接返回错误响应给客户端

D

ngx_http_gzip_filter_module 是一个典型的 Body Filter 模块

12

关于 Nginx 缓冲区配置,以下说法正确的有?

A

client_body_buffer_size 配置读取客户端请求体的缓冲区大小

B

proxy_buffer_size 配置从后端服务器读取响应的首缓冲区大小

C

缓冲区越大,内存消耗越高,但能减少磁盘 I/O

D

缓冲区应该设置得越大越好,以确保性能最优

13

关于 Nginx 的事件驱动与异步 I/O 模型,以下说法正确的有?

A

Nginx 采用 Master-Worker 多进程架构,每个 Worker 进程内部使用单线程事件循环

B

Nginx 在 Linux 上默认使用 epoll 作为事件驱动机制,通过 ngx_epoll_module 实现

C

Worker 进程通过 ngx_process_events_and_timers 函数在一个循环中同时处理网络事件和定时器事件

D

当某个请求的处理涉及阻塞 I/O 操作时,Worker 进程会创建新线程来处理该请求

14

关于 Nginx 的三种核心模块类型,以下说法正确的有?

A

Handler 模块负责生成 HTTP 响应内容,如 ngx_http_static_module

B

Filter 模块对 Handler 生成的响应进行过滤处理,包含 Header Filter 和 Body Filter 两类

C

Load-balancer 模块负责负载均衡策略,仅在 upstream 上下文中生效

D

一个请求只能经过一个 Handler 模块处理

15

关于 Nginx 模块开发中的调试与日志机制,以下说法正确的有?

A

ngx_log_error 的日志级别从低到高依次为:debug、info、notice、warn、error、crit、alert、emerg

B

使用 GDB 调试 Nginx Worker 进程时,需要在配置文件中设置 daemon offmaster_process off

C

Nginx 的 debug 日志需要在编译时使用 --with-debug 选项启用,运行时通过 error_log 的 debug 级别开启

D

ngx_log_debug 系列宏在编译时如果未启用 --with-debug,会被预处理器优化为空操作,不影响性能

16

关于 Nginx 的会话保持(Session Persistence)机制,以下说法正确的有?

A

ip_hash 通过客户端 IP 哈希将同一 IP 的请求固定到同一后端,是最简单的会话保持方式

B

sticky cookie 方式由 Nginx 向后端响应中插入 Cookie,后续请求根据 Cookie 值路由到对应后端

C

基于 Cookie 的会话保持比 ip_hash 更灵活,不受 NAT 网关和代理 IP 的影响

D

ip_hash 配合 upstream 的 weight 参数可以同时实现会话保持和权重负载均衡

17

以下哪些技术可以用于优化 Nginx 的 SSL/TLS 性能?

A

启用 SSL Session 缓存(ssl_session_cache)

B

启用 SSL Session 票据(ssl_session_tickets)

C

启用 OCSP Stapling

D

禁用所有加密套件以减少计算量

填空题
18

在 Nginx 模块开发中,自定义变量通过 ngx_http_variable_t 结构体注册。请填写以下两个关键字段的含义:

第一空(获取变量值的回调函数):____________
第二空(设置变量值的回调函数):____________

19

Nginx 使用 ngx_http_limit_req_module 实现请求频率限制。请填写以下三个核心参数的含义:

第一空(限流区域定义):____________
第二空(引用限流区域):____________
第三空(突发请求处理模式):____________

20

Nginx 将 HTTP 请求处理划分为 11 个阶段(phases),请按顺序填写以下 5 个关键阶段的名称:

第一空(请求改写阶段):____________
第二空(访问控制阶段):____________
第三空(认证阶段):____________
第四空(内容生成阶段):NGX_HTTP_CONTENT_PHASE;
第五空(日志记录阶段):NGX_HTTP_LOG_PHASE。

参考答案
1.正确 2.C 3.B 4.C 5.A 6.D 7.B 8.A 9.B 10.C 11.A;B;D 12.A;B;C 13.A;B;C 14.A;B;C 15.B;C;D 16.A;B;C 17.A;B;C 18.get_handler; set_handler 19.limit_req_zone; limit_req; nodelay 20.NGX_HTTP_REWRITE_PHASE;NGX_HTTP_ACCESS_PHASE;NGX_HTTP_AUTH_PHASE
想在手机上练习这套试卷?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一套试卷 NGINX初级技能认证测试
下一套试卷 → Nginx 底层模块意图自定义模块开发专题测试
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码