You need to enable JavaScript to run this app. Nginx 1.14.2无法读取自定义响应头,正确读取方式是什么?
优惠活动
大模型
产品
解决方案
定价
更多

Nginx 1.14.2无法读取自定义响应头,正确读取方式是什么?

Nginx读取auth_request返回自定义响应头的解决方法

问题根因

$http_*格式的变量用于读取客户端发送到Nginx的请求头,无法读取上游服务(这里就是你的auth.php)返回的响应头,因此你拿不到crawler字段的值。

解决步骤

  1. 用auth_request_set指令捕获auth_request上游返回的自定义响应头,上游响应头对应的变量格式为$upstream_http_<响应头小写名称>,你的响应头名为crawler,对应变量就是$upstream_http_crawler
  2. 替换原if判断里的$http_crawler为你自定义的捕获变量即可

修改后的配置示例

location /download/ {
    # 节省带宽
    limit_req zone=limit_by_addr burst=5 nodelay;
    limit_req_status 429;

    # 匹配除目录外的所有类型文件
    location ~ .+(?<!/)$ { 
        # 下载操作强制登录
        auth_request /account/auth.php;
        error_page 401 = @login;
        
        # 新增这行,捕获auth.php返回的crawler响应头到$is_crawler变量
        auth_request_set $is_crawler $upstream_http_crawler;

        # 校验是否为谷歌爬虫
        # 若auth.php检测到谷歌爬虫会返回自定义头 "header('crawler: 1');"
        if ($is_crawler != '1') {
            # 节省带宽
            limit_conn conn_limit_per_ip 5;
            limit_rate_after 1000m;
            limit_rate 100k;
        }
    }
}

注意事项

  • 如果你的响应头名称包含中划线(比如X-Crawler),需要把中划线替换为下划线,全小写后拼接在$upstream_http_后面,示例:$upstream_http_x_crawler
  • 你使用的Nginx 1.14.2版本原生支持auth_request_set指令,只要你已经开启了http_auth_request_module(当前你能正常使用auth_request说明该模块已开启,无需额外调整)

内容的提问来源于stack exchange,提问作者Mary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 05:54:03