Nginx无内置“模块指令白名单”命令,需通过nginx -V查编译模块、官方文档查指令作用域(如allow仅限http/server/location)、nginx -t验证配置合法性——未知指令报“unknown directive”,作用域错误报“not allowed here”。

Linux 下 Nginx 并没有内置一个“模块指令白名单”的查询命令或配置界面,但你可以通过官方文档、编译时模块列表和运行时验证两种方式,准确获知每个模块支持哪些指令。关键不在于找“白名单”,而在于确认模块是否启用、指令是否在当前作用域合法。
查模块是否已编译并启用
执行以下命令查看 Nginx 编译时包含的模块:
-
nginx -V(大写 V):显示完整编译参数,含
--with-xxx-module或--without-xxx-module项,例如--with-http_access_module表示 access 模块已启用(allow/deny就属于它) - nginx -h | grep -A5 "Available options":快速浏览常用模块开关提示
- nginx -t -v:验证配置同时输出详细模块加载信息(部分版本支持)
查某个指令是否被支持及作用域限制
每个指令都有明确的作用域(context),超出范围会报错。最可靠方法是查阅Nginx 官方文档对应模块页,例如:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
-
allow和deny属于 ngx_http_access_module,仅允许出现在http、server、location块中,不能放在if或map块内 -
limit_req来自ngx_http_limit_req_module,支持http、server、location,但不支持if -
geo指令只能在http块顶层使用,不能嵌套
用配置语法验证指令合法性
把疑似指令写入配置后运行 nginx -t,Nginx 会直接报错并说明原因:
- 若提示
unknown directive "xxx"→ 模块未编译或拼写错误 - 若提示
"xxx" directive is not allowed here→ 作用域错误(如在if中用了allow) - 若提示
invalid number of arguments→ 参数格式不对(如allow后缺 IP 或写错 CIDR)
快速定位常用安全相关指令归属
以下指令及其所属模块可直接参考:
-
allow/deny→ngx_http_access_module(默认启用) -
auth_basic/auth_basic_user_file→ngx_http_auth_basic_module(默认启用) -
geo/map→ngx_http_geo_module和ngx_http_map_module(均默认启用) -
limit_req/limit_conn→ngx_http_limit_req_module和ngx_http_limit_conn_module(需确认是否启用) -
real_ip_header/set_real_ip_from→ngx_http_realip_module(默认启用,但需手动配置才生效)

















