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

Nginx 本身不提供“列出某模块所有可用指令”的内置命令,但你可以通过三种互补方式准确获知一个模块支持哪些配置指令:查编译参数确认模块存在、查官方文档明确指令语法与作用域、用 nginx -t 实时验证配置合法性。
看 nginx -V 确认模块是否已编译进当前版本
运行 nginx -V(注意大写 V),输出中会显示完整编译参数。重点找以 --with- 开头的项:
-
--with-http_access_module→ 表示allow、deny指令可用 -
--with-http_rewrite_module→ 表示rewrite、return、if等指令可用 -
--with-http_ssl_module→ 表示ssl_certificate、ssl_protocols等指令可用
若看到 --without-xxx-module,说明该模块被显式禁用,对应指令自然不可用。
查官方文档定位指令归属与作用域限制
每个 Nginx 指令在官方文档中都有明确归属模块和允许出现的位置(context)。这是最权威的依据:
-
limit_req属于ngx_http_limit_req_module,只允许出现在http、server、location块中 -
geo属于ngx_http_geo_module,只能放在http块顶层,不能嵌套在server或location内 -
auth_basic属于ngx_http_auth_basic_module,支持http、server、location,但不支持if
直接访问 nginx.org/en/docs/,搜索指令名即可跳转到对应模块页,里面会清楚标注 “Syntax”、“Default”、“Context” 和 “Example”。
用 nginx -t 验证指令是否存在及是否用对位置
把疑似指令写入配置文件后执行 nginx -t,Nginx 会立即反馈具体错误类型:
-
unknown directive "xxx"→ 指令名拼错,或所属模块未编译(如用了grpc_pass但没启用http_grpc_module) -
"xxx" directive is not allowed here→ 指令放错了块,比如在if块里写了allow -
invalid number of arguments→ 参数个数或格式不对,例如allow后漏了 IP 地址或 CIDR 表达式
这个方法不依赖记忆,也不依赖文档检索,是上线前必做的实操校验步骤。
不需要背指令列表,掌握这三步——查编译参数、查文档 context、用 -t 验证——就能精准知道任意模块提供了什么指令、在哪能用、怎么写才对。


















