HTTP / 2的Apache反向代理将丢失MIME类型并使用默认值

时间:2019-05-08 14:41:45

标签: apache proxy http2 mod

英语不是我的母语,请原谅输入错误。

我按如下配置Apache反向代理,并且可以正常工作。

ProxyRequests Off
SSLEngine On
SSLProxyEngine On

ProxyPass / https://example.com/
ProxyPassReverse / https://example.com/

我的网站(PHP)支持HTTP/2,所以我想通过HTTP/2代理它。

我启用了mod_proxymod_proxy_httpmod_sslmod_http2mod_proxy_http2和其他一些模块。并将.php的MIME类型设置为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-Typetext/javascript

通过HTTP/2Content-Type对其进行代理 成为application/x-httpd-php,它将失去源MIME类型text/javascript

并通过HTTP/1.1对其进行代理,效果很好。

我该如何解决这个问题?

谢谢。

1 个答案:

答案 0 :(得分:0)

虚拟主机文件配置:

  <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重新启动