2016-10-19 4 views
0

Я искал около часа, и, хотя есть много соответствующих примеров, ни один из них не помог мне решить эту проблему.Использование правил прокси-сервера Apache для внутренних внутренних служб

У меня есть несколько локальных серверов, которые позволяют называть их сервером печати и управляемым коммутатором. Оба этих устройства размещают страницы администрирования на порту 80. У меня также есть веб-сервер на базе apache2.

Что я хочу сделать, это посетить example.com/printserver и заставить его управлять прокси-соединением с сервером печати.

Многие примеры покажут вам что-то вроде этого

<VirtualHost *:80> 

    ProxyPass /printserver http://[local IP of print server]/printserver 
    ProxyPassReverse /printserver http://[local IP of print server]/printserver 

    ProxyPass /switch http://[local IP of managed switch]/switch 
    ProxyPassReverse /switch http://[local IP of managed switch]/switch 

</VirtualHost> 

Но это не делает логический смысл для меня. Страницы администрирования этих устройств не находятся на /printserver, они находятся на /.

Когда я настроить апач со следующим, я могу добиться того, чего я хочу за одну услугу

<VirtualHost *:80> 

    ProxyPass/http://[local IP of print server] 
    ProxyPassReverse/http://[local IP of print server] 

</VirtualHost> 

Кроме того, я заметил, что когда я настроить апач со следующим, он пытается прокси моей службы , но поскольку служба возвращает относительный URL-адрес, часть printserver объединяется с относительным адресом, и вся вещь падает.

<VirtualHost *:80> 

    ProxyPass /printserver http://[local IP of print server]/printserver 
    ProxyPassReverse /printserver http://[local IP of managed switch]/switch 

</VirtualHost> 

Например, в предыдущем примере, где он работал, мой браузер отображает http://example.com/pathtoindex/indexOfPrintServer.php

во втором примере, где он падает вниз, мой браузер показывает http://example.com/printserverpathtoindex/indexOfPrintServer.php

Если я использую следующие

<VirtualHost *:80> 

    ProxyPass /printserver/ http://[local IP of print server]/printserver 
    ProxyPassReverse /printserver/ http://[local IP of managed switch]/switch 

</VirtualHost> 

Тогда мой браузер показывает следующее, что не получается, потому что http://example.com/pathtoindex не будет получать мои правила прокси и не будет обрабатываться каким-либо другим виртуальным сервером.

HTTP: \ example.com \ pathtoindex \ indexOfPrintServer.php

То, что я хотел бы достичь:

Когда я посещаю http://example.com/printserver, я хочу видеть, что я вижу, когда я посещаю http://[local IP of print server] на мой местный сеть.

Аналогичным образом, когда я посещаю http://example.com/switch Я хочу посмотреть, что вижу, когда я нахожусь http://[local IP of managed switch] в своей локальной сети.

ответ

0

Ключом является использование proxyhtmlurlmap, который перехватывает страницу в пути и обновляет теги URL-адреса HTML, чтобы разместить дополнительный элемент пути.

Однако в моей конкретной установке это было неэффективно, так как обе страницы сервера имели некоторый неприятный javascript в том, что ganerated некоторые URL-адреса на стороне клиента. Очевидно, что практически невозможно проверить HTML-код в пути и исправить эти проблемы.

В конце я использовал iptables и установил для доступа к серверам через порт. (Я не мог просто установить это на маршрутизаторе, так как мой маршрутизатор имеет очень ограниченное количество портов вперед).

Если бы я действительно хотел, я мог бы перенаправить apache example.com/server1 в example.com:xxxx, но это не нужно.