更多信息

更多信息

我试图了解为什么我的 Apache 2.4 代理<!doctype html>在通过 SSL 连接(端口 443)连接时会删除声明,但通过任何其他端口连接时不会删除。

我有 Apache 代理到内部 IIS 服务器。当通过 Apache 调用此页面时,http我从 Apache 获得的代码与直接从 IIS 调用时获得的代码完全相同。以下是该页面:

<!doctype html>
<html>
   <head>
     <meta charset="UTF-8">
     <title>Example document</title>
   </head>
   <body>
     <p>Example paragraph</p>
   </body>
</html>

但是,如果我通过httpsApache连接<!doctype html>,声明和<header>标签会被删除,但内容不会删除;并且会添加一个神秘的空<p> </p>括号。这是我得到的回报:

<html><body><p>

    </p>
      <meta charset="UTF-8">
      <title>Example document</title>

      <p>Example paragraph</p>

</body></html>

我尝试将ProxyHTMLDocType "<!DOCTYPE html>"and/or添加ProxyHTMLDocType html5httpd-ssl.conf文件 - 但没有效果。(当然,我在进行更改后重新启动了 Apache。)


更多信息

Apache 访问日志

1.2.3.4 - - [02/Apr/2017:11:58:00 -0700] "GET /test.html HTTP/1.1" 200 151

通过执行 直接从 IIS 请求页面http://192.168.1.200:8089/file.html将按预期返回<!doctype html>...。如果通过 请求页面,情况也是如此http://example.com:8082/file.html。但是,奇怪的是,像这样调用它:https://example.com/file.html <!doctype html>会被删除。(见上文……)

我在用Apache 2.4

IIS 正在监听:8089

Apache 监听 :80 :8082 和 :443

Apache 2.4 httpd.conf

<VirtualHost *:8082>
    ServerName www.example.net:8082
    ServerName example.net:8082
    <IfModule mod_proxy.c>    
        ProxyRequests Off
        ProxyPass        /  http://192.168.1.200:8089/
        ProxyPassReverse /  http://192.168.1.200:8089/
    </IfModule>
</VirtualHost>

Apache 2.4 httpd-ssl.conf 文件

<VirtualHost www.example.net:443>
    ServerName www.example.net
    <IfModule mod_proxy.c>    
        ProxyRequests Off
        ProxyPass        /  http://192.168.1.200:8082/
        ProxyPassReverse /  http://192.168.1.200:8082/
        ...
    </IfModule>


    #  --------------------------------------------------
    #  If I remove this section it works as expected, but
    #  the page returned includes links that are not rewritten:
    #  http://192.168.1.200:8082 gets not rewritten to
    #  https://www.example.net/ 
    #
    #  this part rewrites the links but drops the DocType
    #  

        <Proxy "http://192.168.1.200:8089">
            ProxyHTMLEnable  on
            ProxyHTMLExtended on
            ProxyHTMLMeta On
            ProxyHTMLURLMap http://192.168.1.200:8082 https://www.example.net/
        </Proxy>
    #  --------------------------------------------------

</VirtualHost>

更多信息 2

我发现在调用时,error_SSL.log 中会记录一个错误

[Mon Apr 03 18:51:32.821700 2017] [xml2enc:error] [pid 11008:tid 1736] [client 1.2.3.4:4961] AH01435: Charset ISO-8859-1 not supported.  Consider aliasing it?
[Mon Apr 03 18:51:32.821700 2017] [xml2enc:warn] [pid 11008:tid 1736] [client 1.2.3.4:4961] AH01436: No usable charset information; using configuration default

我在 IIS 10 管理器默认 HTTP 响应标头中添加了一个新条目,类型为 name: Content-Typevalue:,charset=uft-8只是为了确保 Apache 从 IIS 字符集 uft-8 获取,而不是字符集 ISO-8859-1。我还将其添加ProxyHTMLCharsetOut UTF-8到代理中。所以现在它显示

<Proxy "http://192.168.1.200:8089">
    ProxyHTMLEnable On
    ProxyHTMLExtended On
    ProxyHTMLMeta On        
    ProxyHTMLCharsetOut UTF-8

    #                find                      replace_with
    ProxyHTMLURLMap  http://192.168.1.105:8082 https://example.com/site1
    ProxyHTMLURLMap  http://192.168.1.105:8083 https://example.com/site2
    ProxyHTMLURLMap  http://192.168.1.105:8084 https://example.com/site3
</Proxy>

答案1

我怀疑你的问题是:

<Proxy "http://192.168.1.200:8089">
        ProxyHTMLEnable  on
        ProxyHTMLExtended on
        ProxyHTMLMeta On
        ProxyHTMLURLMap http://192.168.1.200:8082 https://www.example.net/
</Proxy>

哪个我认为应该读:

<Proxy "http://192.168.1.200:8089">
        ProxyHTMLEnable  on
        ProxyHTMLExtended on
        ProxyHTMLMeta On
        ProxyHTMLURLMap http://192.168.1.200:8082/ /
</Proxy>

您能否重写httpd-ssl.conf为:

<VirtualHost www.example.net:443>
    ServerName www.example.net
    <IfModule mod_proxy.c>    
        ProxyRequests Off
        ProxyPass        /  http://192.168.1.200:8089/
        ProxyPassReverse /  http://192.168.1.200:8089/
        ...
    </IfModule>

并避免通过:8082代理?还是对请求做了其他事情?

您可能还会发现一些帮助ProxyHTMLURLMap 在 apache2.4 中不起作用

相关内容