【发布时间】:2018-07-02 23:37:30
【问题描述】:
需要有人将我推向正确的方向。
我们正在使用 apache http 服务器 (http1) 反向代理向另一个 http 服务器 (http2) 发送请求。挑战在于 http2 不会在响应中将 HTML 页面发送回 http1。
http2 日志确实显示了进来的请求。但是,http1 日志导致 HTTP 502 错误:
内部错误(具体信息不可用):[client] AH01102: error reading status line from remote server localhost:9001 [proxy:error] [client] 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/"
【问题讨论】:
-
我想知道 http1 实际上从 http2 收到了什么。无论如何要附加数据包嗅探器?
-
是的,我会这样做并告诉你进展如何。谢谢。
-
要检查的一件事是
http2是否在发送\r\n\r\n之后发送200,因为这会关闭响应。另一件要考虑的事情是,如果没有内容,让http2发送204,因为在现代网络浏览器中,接收没有任何正文的 200 会引发错误。 -
已验证没有从 http2 发送响应。使用 snoop(在 Solaris 上)进行数据包嗅探。很遗憾,我们无法对 http2 进行更改。
-
作为另一种可能的解决方案:研究抑制 error_log 中的错误(通过 httpd.conf 中的 ErrorLog 指令配置)。到目前为止发现了如何抑制 access_log 日志记录而不是 error_log。
标签: apache proxy reverse-proxy httpserver