Apache-2.4
使用 apache 2.4 + http2 + proxy_http 上傳文件的問題
我目前正在嘗試為項目啟用 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