Apache-2.4

使用 apache 2.4 + http2 + proxy_http 上傳文件的問題

  • July 1, 2017

我目前正在嘗試為項目啟用 http2。該系統在啟用了 proxy_protocol 的 ELB 後面的 AWS 上的 Ubuntu 16.04 上執行。該站點僅使用來自 ppa:ondrej/apache2 的 Apache 2.4 以 mpm_event 模式執行 SSL,並以 tomcat 7 作為後端。虛擬主機配置是:

<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 中。代理協議標頭看起來也不錯,所以我也對第一條消息感到困惑。

有人知道這裡發生了什麼:)?

看起來像 mod_proxy_protocol 中的錯誤。目前與 mod_http2 不兼容。

有關更多詳細資訊,請參閱此錯誤:https ://github.com/roadrunner2/mod-proxy-protocol/issues/6

引用自:https://serverfault.com/questions/858867