使用 apache 2.4 + http2 + proxy_http 上传文件时出现的问题

使用 apache 2.4 + http2 + proxy_http 上传文件时出现的问题

我目前正在尝试为一个项目启用 http2。该系统在 AWS 上的 Ubuntu 16.04 上运行,位于启用了 proxy_protocol 的 ELB 后面。该站点仅使用来自 ppa:ondrej/apache2 的 Apache 2.4 在 mpm_event 模式下运行 SSL,并使用 tomcat 7 作为后端。vhost 配置为:

<VirtualHost *:443>
  ProxyProtocol On
  ServerName myhostname
  DocumentRoot /var/www/html/

  <Directory /var/www/html/>
    Options +FollowSymLinks -Indexes
    AllowOverride None
    Require all granted
  </Directory>
  <Location />
    Require all granted
  </Location>


  Header always set Strict-Transport-Security "max-age=86400"

  RequestHeader set X-Forwarded-Proto https
  SSLEngine On
  SSLCertificateFile       mycrt
  SSLCertificateKeyFile    mykey

  ProxyTimeout 1800
  ProxyPreserveHost on
  ProxyPass         /  http://localhost:8080/
  ProxyPassReverse  /  http://localhost:8080/

</VirtualHost>

如果我们启用 http2,则“正常”的 GET / POST 请求可以正常工作,仅文件上传会导致日志中出现如下消息,并向客户端发送 400 错误请求:

[proxy_protocol:error] [client ] ProxyProtocol: no valid header found
[proxy_http:error] (103)Software caused connection abort: [client ] AH01095: prefetch request body failed to 127.0.0.1:8080 (localhost) from 10.X (), referer: 

我进行了一些跟踪,但请求并未发送到 tomcat,而是卡在了 apache 中。代理协议标头看起来也正常,因此第一条消息也让我感到困惑。

有人知道这里发生了什么吗:)?

答案1

看起来像是 mod_proxy_protocol 中的一个错误。它目前与 mod_http2 不兼容。

请参阅此错误以了解更多详细信息:https://github.com/roadrunner2/mod-proxy-protocol/issues/6

相关内容