GNU/Linux >> Znalost Linux >  >> Linux

Jak správně zacházet s relativními adresami URL pomocí reverzního proxy

Ř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
  1. Načtěte modul mod_proxy_html

    LoadModule proxy_html_module modules/mod_proxy_html.so
    
  2. 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.


Linux
  1. Jak nastavit reverzní proxy Nginx

  2. Jak nainstalovat Odoo 10 na CentOS 7 s Nginx jako reverzní proxy

  3. Jak nainstalovat Flectru na Ubuntu 20.04 s Nginx jako reverzní proxy

  1. Jak nainstalovat Odoo 12 na Ubuntu 18.04 s Nginx jako reverzní proxy

  2. Jak nainstalovat Odoo 11 na Debian 9 s Nginx jako reverzní proxy

  3. Jak nainstalovat Odoo 12 na Debian 10 s Nginx jako reverzní proxy

  1. Jak nainstalovat Odoo 11 na CentOS 7 s Nginx jako reverzní proxy

  2. Jak nainstalovat Flectru na CentOS 8 s Nginx jako reverzní proxy

  3. Jak nainstalovat Odoo 14 na CentOS 8 s Nginx jako reverzní proxy