在Nginx Helm Chart的http-snippet中定义map出现语法错误
解决Ingress-nginx中map指令配置错误的问题
问题原因分析
你遇到的错误有两个核心原因:
- 正则表达式语法错误:map中的正则
~(*/)([0-9]{3,}+)(/*)$存在冗余写法,{3,}已经表示匹配3个及以上数字,后续的+属于无效语法,会导致nginx解析配置时出错。 - map指令的上下文位置错误:ngx_http_map_module的
map指令必须放在http块的顶级上下文(不能在server或location块内),而你的配置中map被错误插入到了server块内部(从错误日志里的proxy_ssl_session_reuse on;可以判断,这是server块内的指令)。
修正后的配置
1. 修复正则表达式
将map中的正则改为~(*/)([0-9]{3,})(/*)$,去掉多余的+符号。
2. 确保map处于正确上下文
在Ingress-nginx的Helm Chart中,http-snippet是将配置插入到http块顶级的正确配置项,修正后的完整配置如下:
containerPort: http: 80 https: 443 config: log-format-upstream: $time_iso8601, $proxy_protocol_addr, $proxy_add_x_forwarded_for, $req_id, $remote_user, $bytes_sent, $request_time, $status, $host, $server_protocol, $uri $uri_category http-snippet: | map $uri $uri_category { ~(*/)([0-9]{3,})(/*)$ $2; } configAnnotations: {}
验证修正效果
重新部署Helm Chart后:
map会被正确放置在http块顶级,符合ngx_http_map_module的要求- 正则表达式语法合法,能正确提取URI中的数字段赋值给
$uri_category变量 - 日志格式中的
$uri_category可以正常输出匹配到的内容
内容的提问来源于stack exchange,提问作者user971741
相关产品推荐
相关产品推荐

