如何在Apache反向代理中传递SERVER_PROTOCOL参数
解决Apache反向代理传递客户端HTTP版本到后端的问题
问题原因
你使用的%{SERVER_PROTOCOL}e环境变量,实际指向的是Apache与后端应用通信时采用的HTTP/1.1协议,而非客户端与代理之间的HTTP/2协议。并且在反向代理的请求头配置上下文里,该环境变量无法被正确读取,导致后端收到空值。
正确配置方案
方案1:直接获取客户端请求协议
使用%{REQUEST_PROTOCOL}s格式符,它能直接获取客户端发起请求时使用的HTTP协议版本:
RequestHeader set X-Client-HTTP-Version "%{REQUEST_PROTOCOL}s"
方案2:通过HTTP2环境变量判断
当客户端使用HTTP/2请求时,Apache会自动设置HTTP2环境变量为on,可据此区分协议版本:
# 若为HTTP/2请求,设置对应头 RequestHeader set X-Client-HTTP-Version "HTTP/2" expr=%{HTTP2} == 'on' # 否则默认设置为HTTP/1.1 RequestHeader set X-Client-HTTP-Version "HTTP/1.1" expr=%{HTTP2} != 'on'
验证方法
配置完成后重启Apache,后端应用通过读取X-Client-HTTP-Version请求头,就能获取客户端实际使用的HTTP版本。
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

