Nginx 条件判断
在 Nginx 中,条件判断通常用于根据特定条件动态调整配置或请求处理逻辑。虽然 Nginx 的配置语言是声明式的(非通用编程语言),但仍支持一些条件判断机制。
if 指令(上下文:server, location)
功能:在特定条件下修改请求或响应行为。
注意:Nginx 官方文档指出
if可能存在“意料之外的行为”,建议谨慎使用(尤其在location中)。示例:
nginxlocation / { if ($request_method = POST) { return 405; # 拦截 POST 请求 } }
map 指令(上下文:http)
功能:基于变量值映射到另一个值,类似键值对或 switch-case。
示例:根据
$http_user_agent设置变量:nginxmap $http_user_agent $is_mobile { default 0; "~*android" 1; "~*iphone" 1; } server { if ($is_mobile) { rewrite ^ /mobile-redirect; } }
try_files 指令(上下文:server, location)
功能:按顺序检查文件或路径是否存在,否则返回备用结果。
示例:
nginxlocation / { try_files $uri $uri/ /index.html; }$uri- 先检查请求的 精确路径对应的文件 是否存在(例如请求
/about,则查找/about这个文件)。 - 如果文件存在,直接返回该文件;否则继续下一步。
- 先检查请求的 精确路径对应的文件 是否存在(例如请求
$uri/- 检查请求的路径是否是一个 目录(例如请求
/blog/,会查找/blog/index.html等默认索引文件)。 - 如果是目录且存在默认索引文件(如
index.html),返回目录内容;否则继续下一步。
- 检查请求的路径是否是一个 目录(例如请求
/index.html- 如果前两步均未找到匹配的资源,则 返回
/index.html作为默认响应(常见于单页应用 SPA 的路由处理)。
- 如果前两步均未找到匹配的资源,则 返回
geo 指令(上下文:http)
功能:根据客户端 IP 条件设置变量。
示例:
nginxgeo $allow_ip { default 0; 192.168.1.0/24 1; # 允许内网访问 } server { if ($allow_ip = 0) { return 403; } }
limit_except 指令(上下文:location)
功能:限制特定 HTTP 方法(如只允许 GET)。
示例:
nginxlocation /api { limit_except GET { deny all; } }
