Nginx POST子请求字符编码异常,获取Auth0令牌返回乱码求助
问题解决:Nginx NJS调用Auth0获取令牌时响应体乱码
问题原因
响应状态码200但出现乱码,本质是Auth0返回了gzip压缩的响应体,但Nginx的subrequest未自动解压,导致res.responseText读取到的是二进制压缩数据,显示为乱码字符。
修复方案
方案1:强制服务端返回未压缩数据
在Nginx的/auth0/generate-token location配置中,添加Accept-Encoding请求头,告知Auth0不要返回压缩内容:
location /auth0/generate-token { resolver 1.1.1.1 ipv6=off; set $empty ""; proxy_method POST; proxy_set_header accept "application/json"; proxy_set_header Content-Type "application/json"; # 新增:强制服务端返回未压缩的明文数据 proxy_set_header Accept-Encoding "identity"; proxy_pass https://myauth0url; }
方案2:配置Nginx自动解压响应
如果需要保留压缩传输,可启用Nginx的gunzip模块自动解压响应(需确保Nginx编译时包含ngx_http_gunzip_module):
location /auth0/generate-token { resolver 1.1.1.1 ipv6=off; set $empty ""; proxy_method POST; proxy_set_header accept "application/json"; proxy_set_header Content-Type "application/json"; # 启用自动解压 gunzip on; proxy_pass https://myauth0url; }
额外检查点
- 确认
r.headersIn['auth-body']传递的请求体是合法JSON格式,避免因请求格式错误导致服务端返回异常内容。 - 确保使用的NJS版本为0.5.0及以上,旧版本可能存在subrequest响应处理的兼容性问题。
内容的提问来源于stack exchange,提问作者Sadha Moodley
相关产品推荐
相关产品推荐

