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

Nginx 底层模块意图自定义模块开发专题测试

20 题 60 分钟 难度:★★★

考察知识点

  • Nginx 模块架构与生命周期(配置/初始化/请求处理阶段)
  • 模块类型(Handler/Filter/Load-balancer)
  • 模块配置指令解析(ngx_command_t/create_loc_conf/merge_loc_conf)
  • 请求处理与钩子函数(postconfiguration 注册 Handler)
  • Header Filter + Body Filter 机制
  • 内存池与数据结构(ngx_pool_t/ngx_str_t/ngx_array_t/ngx_list_t/ngx_hash_t)
  • 事件驱动与异步 I/O(单线程+epoll 事件循环)
  • 模块编译与集成(--add-module 静态/load_module 动态)
  • 变量与运行时上下文(ngx_http_variable_t 注册)
  • 调试与日志机制(ngx_log_error/gdb/debug 日志)
💡 参考答案在文末
判断题
1

Nginx 的访问日志可以用于安全监控和审计,通过分析日志可以发现异常访问行为和潜在的安全攻击。()

A

B

单选题
2

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

A

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

B

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

C

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

D

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

3

在多核 CPU 服务器上,为了提升 Nginx 的性能,可以将 Worker 进程绑定到特定的 CPU 核心上。以下关于 CPU 绑定的说法,正确的是?

A

使用 worker_cpu_affinity 指令可以配置 CPU 亲和性

B

CPU 绑定时,worker_processes 必须等于 CPU 核心数

C

自动 CPU 绑定时,可以使用 auto 参数让系统自动分配

D

CPU 绑定在任何场景下都能显著提升性能

4

以下关于 Nginx 的描述,哪一项是最准确的?

A

Nginx 是一个基于线程池模型的 Web 服务器,适合处理低并发场景

B

Nginx 是一个高性能的 HTTP 和反向代理服务器,采用事件驱动架构

C

Nginx 是一个数据库连接池中间件,主要用于优化数据库查询

D

Nginx 是一个前端框架,用于构建单页应用程序

5

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

A

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

B

初始化阶段(init_module / init_process)

C

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

D

数据库连接阶段(database_connect)

6

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

A

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

B

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

C

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

D

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

7

要监控 Nginx 的实时性能指标(如活跃连接数、请求速率等),最简单的方式是?

A

查看 Nginx 的错误日志

B

启用 ngx_http_stub_status_module 模块,通过 HTTP 接口查看状态

C

查看 Nginx 的访问日志并手动统计

D

定期重启 Nginx 以重置计数器

8

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

A

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

B

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

C

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

D

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

9

在 Linux 系统上,Nginx 性能最优的事件驱动模型是?

A

select

B

poll

C

epoll

D

kqueue

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 健康检查机制的说法,最适合用于灰度发布场景的是?

A

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

B

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

C

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

D

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

12

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

A

proxy_cache 缓存数据存储

B

limit_req_zone 限流区域

C

access_log 日志文件

D

error_log 错误日志

多选题
13

关于 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 参数可以同时实现会话保持和权重负载均衡

14

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

A

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

B

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

C

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

D

ngx_http_gzip_filter_module 是一个典型的 Body Filter 模块

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 的事件驱动与异步 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 进程会创建新线程来处理该请求

17

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

A

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

B

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

C

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

D

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

18

以下哪些指令可以出现在 Nginx 配置文件的全局 main 段?

A

worker_processes

B

error_log

C

pid

D

server_name

填空题
19

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

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

20

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

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

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