У нас есть веб-сервер Apache (действующий как прокси), который находится перед несколькими серверами, на которых работают разные приложения: IIS, Tomcat, jBoss и т. Д. Сервер Apache действует как прокси на нашем единственном статическом внешнем IP-адресе. У нас есть несколько доменных имен, указывающих на один IP-адрес, и Apache перенаправляет / прокси-запросы на правильные серверы.
Одна из проблем заключается в том, что при проксировании на экземпляр IIS6 запросы маршрутизируются нормально, но когда пользователь вводит доменное имя example.com/home, его адресная строка изменяется на 192.168.10.30/home или любой другой внутренний IP-адрес для этого сервер есть. Ой.
Другая проблема заключается в том, что при загрузке страниц из одного и того же экземпляра IIS6 возникают проблемы, когда загружается часть содержимого страницы, но не все. Некоторые изображения «теряются», некоторые JavaScript не загружаются и т. Д.
Примечание. Я не виню IIS6, но это единственное устройство, с которым у нас возникли проблемы.
Вот запись VirtualHost в Apache, которую я использую. Мне что-то не хватает в конфиге?
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
ProxyPass / http://192.168.10.50/
ProxyPassReverse / http://192.168.10.50/
ProxyPreserveHost On
</VirtualHost>
Вот ошибка прокси 502, которая ИНОГДА появляется в запросах (может быть любой случайный запрос - css, js, html и т. д.):
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>502 Proxy Error</title>
</head><body>
<h1>Proxy Error</h1>
<p>The proxy server received an invalid response from an upstream server.<br />
The proxy server could not handle the request <em><a href="/public/example/js/jquery-1.3.2.min.js">GET /public/example/js/jquery-1.3.2.min.js</a></em>.<p>
Reason: <strong>Error reading from remote server</strong></p></p>
</body></html>
Сам IIS не будет вызывать это перенаправление, если он специально не настроен для этого. Скорее всего, это что-то в коде, выполняющее перенаправление, или правило обратного прокси-сервера Apache, вызывающее это.
Хороший способ сузить его - протестировать локально в поле IIS и посмотреть, перенаправляет ли он. (хотя тест может быть испорчен, так как вы будете тестировать с другим IP). Если он перенаправляет туда, то вы знаете источник, в противном случае он находится на уровне прокси.
Проверять, выписываться Директива ProxyPreserveHost