Apache ProxyPassRewrite nie przepisuje treści odpowiedzi otrzymanych ze strony http://test.example.com , a jedynie nagłówki (takie jak przekierowania do strony 404 itp.).
Szereg alternatyw:
Jeden ) Przepisz aplikację wewnętrzną, aby używała ścieżek względnych zamiast bezwzględnych. tj. ../css/style.css
zamiast/css/style.css
Dwa ) Wdróż ponownie aplikację wewnętrzną w tym samym podkatalogu, /folder
a nie w katalogu głównym test.example.com.
Trzy ) Raz i dwa często się nie zdarzają ... Jeśli masz szczęście, wewnętrzna aplikacja używa tylko dwóch lub trzech podkatalogów i nie są one używane w Twojej głównej witrynie , po prostu napisz kilka wierszy ProxyPass:
# Expose Internal App to the internet.
ProxyPass /externalpath/ http://test.example.com/
ProxyPassReverse /externalpath/ http://test.example.com/
# Internal app uses a bunch of absolute paths.
ProxyPass /css/ http://test.example.com/css/
ProxyPassReverse /css/ http://test.example.com/css/
ProxyPass /icons/ http://test.example.com/icons/
ProxyPassReverse /icons/ http://test.example.com/icons/
Cztery ) Utwórz osobną subdomenę dla wewnętrznej aplikacji i po prostu odwróć wszystko proxy:
<VirtualHost *:80>
ServerName app.example.com/
# Expose Internal App to the internet.
ProxyPass / http://test.internal.example.com/
ProxyPassReverse / http://test.internal.example.com/
</VirtualHost>
Pięć ) Czasami deweloperzy są całkowicie nieświadomi i mają swoje aplikacje generują nie tylko absolutny URL, ale nawet to część nazwy w ich URL i otrzymany kod HTML wygląda następująco: <img src=http://test.example.com/icons/logo.png>
.
Odp. ) Możesz użyć rozwiązania kombi DNS DNS z podziałem horyzontu i scenariusza 4. Zarówno użytkownicy wewnętrzni, jak i zewnętrzni korzystają z witryny test.example.com, ale wewnętrzny serwer DNS wskazuje bezpośrednio adres IP serwera test.example.com. W przypadku użytkowników zewnętrznych rekord publiczny dla test.example.com wskazuje adres IP publicznego serwera internetowego www.example.com, a następnie można użyć rozwiązania 4.
B ) W rzeczywistości można uzyskać apache do nie tylko żądań proxy do test.example.com, ale także przepisać treść odpowiedzi, zanim zostanie ona przesłana do użytkowników. (Zwykle serwer proxy przepisuje tylko nagłówki / odpowiedzi HTTP). mod_substitute w apache 2.2. Nie testowałem, czy dobrze układa się z mod_proxy, ale może następujące działa:
<Location /folder/>
ProxyPass http://test.example.com/
ProxyPassReverse http://test.example.com/
AddOutputFilterByType SUBSTITUTE text/html
Substitute "s|test.example.com/|www.example.com/folder/|i"
</Location>