You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Nginx njs同步函数中调用异步crypto.subtle.digest?

解决njs中js_set同步函数调用SHA-512哈希的问题

你可以直接使用njs内置的同步crypto哈希接口替代异步的crypto.subtle.digest,完全满足js_set对同步代码的要求,同时不需要引入第三方库。

核心实现思路

njs的crypto模块提供了和Node.js风格一致的同步哈希创建方法,直接生成哈希结果,无需处理Promise。具体步骤:

  • 用crypto.createHash('sha512')创建SHA-512哈希对象
  • 通过update()方法传入要计算哈希的原始数据(支持字符串或Uint8Array)
  • 调用digest()获取最终哈希值(可指定编码,比如'hex'或'base64')

完整代码示例

Nginx配置片段

http {
    js_import crypto_functions from crypto.js;
    js_set $obfuscated_token crypto_functions.get_obfuscated_token;

    server {
        # 其他配置...
        location / {
            add_header X-Obfuscated-Token $obfuscated_token;
            # 其他处理...
        }
    }
}

crypto.js代码

function get_obfuscated_token(r) {
    // 假设这里是你要计算哈希的原始数据,比如从请求中获取的内容
    const rawData = r.headersIn['X-Raw-Data'] || 'default-secret';
    // 同步计算SHA-512哈希
    const hash = crypto.createHash('sha512')
                      .update(rawData)
                      .digest('hex'); // 可根据需求改为base64等编码
    return hash;
}

export default { get_obfuscated_token };

关键说明

  • 这个方法完全基于njs内置API,不需要引入任何第三方库,避免了额外的代码维护和许可审查成本。
  • 同步函数直接返回哈希字符串,不会出现[object Promise]的问题,完美适配js_set的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 02:22:33