我目前正在尝试为一个项目启用http2。 系统在启用了proxy_protocol的ELB后面的AWS上的Ubuntu 16.04上运行。 该站点仅使用Apache 2.4从ppa:ondrej / apache2以mpm_event模式运行SSL,并使用tomcat 7作为后端。 虚拟主机configuration是:
<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请求就可以正常工作,只是file upload会在日志中产生这样的消息:
[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:
我做了一些stracing和请求不是事件发送到tomcat,它卡在apache。 代理协议头也看起来不错,所以我也被第一条消息搞糊涂了。
有人知道这里发生了什么:)?
看起来像mod_proxy_protocol中的错误。 目前与mod_http2不兼容。
看到这个bug的更多细节: https : //github.com/roadrunner2/mod-proxy-protocol/issues/6