Řešení 1:
Apache ProxyPassRewrite nepřepisuje těla odpovědí přijatých z http://test.example.com, pouze záhlaví (jako přesměrování na stránku 404 a podobně).
Několik alternativ:
Jedna ) Přepište interní aplikaci tak, aby používala relativní cesty místo absolutní. tj. ../css/style.css
místo /css/style.css
Dvě ) Znovu nasaďte interní aplikaci ve stejném podadresáři /folder
spíše než v kořenovém adresáři test.example.com.
Tři ) Jedna a dvě je často nepravděpodobné... Pokud budete mít štěstí, interní aplikace používá pouze dva nebo tři podadresáře a ty jsou na vašem hlavním webu nepoužívané , jednoduše napište několik řádků 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/
Čtyři ) Vytvořte samostatnou subdoménu pro interní aplikaci a jednoduše reverzní proxy vše:
<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>
Pět ) Někdy vývojáři jsou úplně bezradní a jejich aplikace nejen generují absolutní adresy URL, ale dokonce zahrnují část názvu hostitele do svých adres URL a výsledný kód HTML vypadá takto:<img src=http://test.example.com/icons/logo.png>
.
A ) Můžete použít kombinované řešení DNS rozděleného horizontu a scénář 4. Interní i externí uživatelé používají test.example.com, ale váš interní DNS ukazuje přímo na IP adresu serveru test.example.com. Pro externí uživatele ukazuje veřejný záznam pro test.example.com na IP adresu vašeho veřejného webového serveru www.example.com a poté můžete použít řešení 4.
B ) Apache můžete ve skutečnosti získat nejen pro požadavky proxy na test.example.com, ale také přepsat tělo odpovědi než bude předán vašim uživatelům. (Normálně proxy pouze přepisuje HTTP hlavičky/odpovědi). mod_substitute v Apache 2.2. Netestoval jsem, zda se dobře skládá s mod_proxy, ale možná funguje následující:
<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>
Řešení 2:
Jako doplněk k odpovědi HBruijna, pokud se rozhodnete pro řešení (3) "ProxyPass", možná budete muset použít také mod_proxy_html k přepsání některých adres URL ve vašich HTML stránkách.
srov. Jak správně zacházet s relativními adresami URL pomocí reverzního proxy pro některé příklady.
Jako aplikovaný příklad uvádíme, jak můžete nakonfigurovat Apache pomocí ProxyHTMLURLMap
pravidlo přeposílat vše na název-vaší-domény.com/pad k vaší instanci Etherpad spuštěné lokálně na portu 9001:
<Location /pad>
ProxyPass http://localhost:9001 retry=0
# retry=0 => avoid 503's when restarting etherpad-lite
ProxyPassReverse http://localhost:9001
SetOutputFilter proxy-html
ProxyHTMLURLMap http://localhost:9001
</Location>
RewriteRule ^/pad$ /pad/ [R]
Řešení 3:
Reverzní proxy můžete vytvořit následujícím způsobem:
1. Nainstalujte mod_proxy_html
yum install mod_proxy_html
-
Načtěte modul mod_proxy_html
LoadModule proxy_html_module modules/mod_proxy_html.so
-
A použijte následující nastavení
ProxyRequests off ProxyPass /folder/ http://test.madeupurl.com ProxyHTMLURLMap http://test.madeupurl.com /folder <Location /folder/> ProxyPassReverse / ProxyHTMLEnable On ProxyHTMLURLMap / /folder/ RequestHeader unset Accept-Encoding </Location>
Doufám, že to pomůže.