首页 文章

使用apache http server reverse-proxy发送期望不返回响应的请求

提问于
浏览
1

需要有人把我推向正确的方向 .

我们使用apache http server(http1)reverse-proxy向另一个http服务器(http2)发送请求 . 挑战是http2不会在响应中将HTML页面发送回http1 .

http2日志确实显示了请求进入 . 但是,http1日志导致HTTP 502错误:

内部错误(特定信息不可用):[客户端] AH01102:从远程服务器localhost错误读取状态行:9001 [代理:错误] [客户端] AH00898:从/ app / myContext / LogMessage返回的远程服务器读取错误

这是返回HTTP状态200的http2日志:

“GET / app / myContext / LogMessage HTTP / 1.1”200 -

请注意,那些导致HTML页面正常工作的请求 .

您认为这应该是什么方法?对于这种类型的请求,使用反向代理可能不是一个好的选择吗?

我们在http1上设置httpd.conf这样设置:

ProxyPass "/app/myContext/" 
http://localhost:9001/app/myContext/"
ProxyPassReverse "/app/myContext/" 
http://localhost:9001/app/myContext/"

2 回答

  • 0

    完全禁用 http1 上的ErrorLog:

    ErrorLog /dev/null
    

    您是否尝试使用mod_log_config忽略 http1 ?根据示例,格式字符串可能是:

    CustomLog expr=%{REQUEST_STATUS} -eq 502 && %{REQUEST_URI} =~ /app\/myContext/ ...
    

    或者LogFormat字符串也可以工作:

    LogFormat %!502...
    

    (h / t到Avoid logging of certain missing files into the Apache2 error log

    您的问题是 http1 向请求者发出502?在这种情况下,也许使用 <If> 和自定义 ErrorDocument

    <If %{REQUEST_URI} =~ /app\/myContext/>ErrorDocument 502 'OK'</If>
    
  • 1

    使用以下解决方案:在http2中重新路由LogMessage调用以获取空白html页面:1 . 在/ htdocs目录中创建blankfile.html . 2.在httpd.conf中添加以下行:RewriteRule ^ . (app / myContext / LogMessage) . /blankfile.html [L]

    这对我们有用,因为LogMessage的整个目的是在http2 access_log中记录请求 .

    只是要感谢@cowbert和我一起精通这个!

相关问题