HTTP/2 的 Apache 反向代理将丢失 MIME 类型并使用默认值
Posted
技术标签:
【中文标题】HTTP/2 的 Apache 反向代理将丢失 MIME 类型并使用默认值【英文标题】:Apache reverse proxy by HTTP/2 will lost MIME-type and use default 【发布时间】:2019-09-26 08:08:19 【问题描述】:英语不是我的母语,请原谅输入错误。
我按如下方式配置了 Apache 反向代理,它可以工作。
ProxyRequests Off
SSLEngine On
SSLProxyEngine On
ProxyPass / https://example.com/
ProxyPassReverse / https://example.com/
而且我的网站(php)支持HTTP/2
,所以我想通过HTTP/2
代理它。
我启用了mod_proxy
、mod_proxy_http
、mod_ssl
、mod_http2
、mod_proxy_http2
和其他一些模块。并将.php
MIME-type 设置为application/x-httpd-php
。
AddType application/x-httpd-php .php
VirtualHost 如下:
<VirtualHost *:443>
DocumentRoot "/path/to/wwwroot/"
ServerName localhost:443
ProxyRequests Off
SSLEngine On
SSLProxyEngine On
ProxyPass / h2://example.com/
ProxyPassReverse / https://example.com/
# Cert
SSLCertificateFile ...
SSLCertificateKeyFile ...
</VirtualHost>
不同的是 ProxyPass / https://example.com/
到 ProxyPass / h2://example.com/
。
浏览器中的响应标头 Content-Type
始终获取默认 MIME 类型。
你可以在phpMyAdmin Demo找到例子,在DevTools中过滤whitelist.php
,这个文件Content-Type
是text/javascript
。
通过HTTP/2
代理它,Content-Type
变成application/x-httpd-php
,它失去了源MIME类型text/javascript
。
并通过HTTP/1.1
代理它,效果很好。
我该如何解决这个问题?
谢谢。
【问题讨论】:
【参考方案1】:虚拟主机文件配置:
<VirtualHost *:443>
ServerAdmin admin@test.com
ServerName example.com
ServerAlias www.example.com
ssl_certificate .....
ssl_certificate_key ..........
ProxyRequests Off Order deny, allow Allow from all
<Location />
ProxyPass http://example.com:8000/
ProxyPassReverse http://example.com:8000/
</Location>
</VirtualHost>
接下来我们需要启用一些 Apache 模块。为此,请发出以下命令:
sudo a2enmod 代理
sudo a2enmod proxy_http
sudo a2enmod proxy_balancer
sudo a2enmod lbmethod_byrequests
Apache 现在需要使用以下命令重新启动:
sudo 服务 apache2 重启
【讨论】:
以上是关于HTTP/2 的 Apache 反向代理将丢失 MIME 类型并使用默认值的主要内容,如果未能解决你的问题,请参考以下文章