Назад | Перейти на главную страницу

Прокси-сервер Apache 2.4 (прослушивание порта 443, через сертификат ssl.) Соединение сбрасывает doctype, тогда как прокси-сервер через не-ssl работает должным образом

Я пытаюсь понять, почему мой прокси Apache 2.4 сбрасывает <!doctype html> декларация при подключении через SSL-соединение (порт 443), но не при подключении через любой другой порт.

У меня прокси Apache для внутреннего сервера IIS. При вызове этой страницы http Я получаю от Apache тот же код, что и при его вызове непосредственно из IIS. Это страница:

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

Однако, если я подключусь через https Apache отбрасывает <!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>" и / или ProxyHTMLDocType html5 к httpd-ssl.conf файл - без эффекта. (Естественно, я перезапустил Apache после внесения изменений.)


Больше информации

Apache access.log

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>

Файл httpd-ssl.conf Apache 2.4

<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

Я добавил в заголовок ответа HTTP по умолчанию диспетчера IIS 10 новую запись с именем типа:Content-Type стоимость: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>

Я подозреваю, что ваша проблема:

<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