要解决这个问题,可以使用Nginx的map指令来检测请求的协议版本,并根据需要设置相应的响应头。

首先,在Nginx的配置文件中,添加一个map块来检测请求的协议版本:

map $http2 $http_version {
    default $http_version;
    ''      $server_protocol;
}

然后,在反向代理的配置中,根据检测到的协议版本设置响应头。例如,如果请求使用HTTP/1.1协议,可以使用add_header指令设置Content-Length响应头,如果请求使用HTTP/2协议,则不需要设置Content-Length

location / {
    proxy_pass http://backend;
    
    if ($http_version = "HTTP/1.1") {
        add_header Content-Length $upstream_http_content_length;
    }
}

在上述配置中,$upstream_http_content_length变量表示后端服务器返回的响应头中的Content-Length值。

请注意,使用if指令可能会对性能产生一些负面影响。如果可能的话,建议使用map指令来检测协议版本,并在add_header指令中使用变量来设置响应头。

另外,还要确保后端服务器正确设置了Content-Length或者使用了chunked编码来发送响应数据。这样,Nginx才能正确地将这些信息传递给客户端。

Nginx开启http2协议反向代理时期望在用户使用http11协议请求时能够为用户返回正确的chunked 编码的数据或者带有content-length响应的正确长度的响应数据请问如何解决

原文地址: https://www.cveoy.top/t/topic/i4St 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录