nginx 的 map 模块是内置模块,无需安装第三方模块,只要编译时未加 --without-http-map-module 即可用;通过 nginx -v | grep with-http_map_module 验证,且 map 指令必须置于 http 块顶层。

Nginx 默认不启用 map 模块,但它其实是内置模块(built-in),**无需额外安装第三方模块,只要在编译时确保未被禁用即可使用**。也就是说,你不需要“启用”它,而是要确认它没有被显式关闭。
确认 map 模块是否可用
运行以下命令检查 Nginx 是否已包含 map 模块:
如果输出中包含 with-http_map_module,说明该模块已编译进 Nginx;若无输出,说明编译时被排除了。
编译时确保 map 模块被包含
map 模块属于 HTTP 核心功能模块,默认开启。只要没手动加 --without-http-map-module,它就会自动编译进去。所以正常编译流程即可:
- 下载源码后进入目录,执行
./configure(不加任何禁用 map 的参数) - 常见安全/常用组合如
--with-http_ssl_module --with-http_v2_module不会影响 map 模块 - 执行
make && sudo make install
验证配置是否生效
编辑 nginx.conf,添加一个简单 map 示例:
default desktop;
~*mobile|android|iphone mobile;
}
然后在 server 块中引用:
return 200 "Device: $device";
重载配置 nginx -s reload,用不同 UA 请求测试,能正确返回即表示 map 工作正常。
常见误区提醒
-
map是指令(directive),不是需要加载的动态模块(.so),所以不用写load_module - 不能在
server或location块里直接定义 map,必须放在http块顶层 - 旧版 Nginx(











