Я пытаюсь понять, почему мой прокси 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>
Я обнаружил, что при вызове в 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