GNU/Linux >> Tutoriels Linux >  >> Linux

Comment gérer correctement les URL relatives avec un proxy inverse

Solution 1 :

Apache ProxyPassRewrite ne réécrit pas les corps de réponse reçus de http://test.example.com, uniquement les en-têtes (comme les redirections vers une page 404 et autres).

Plusieurs alternatives :

Un ) Réécrivez l'application interne pour utiliser des chemins relatifs au lieu d'absolus. c'est-à-dire ../css/style.css au lieu de /css/style.css

Deux ) Redéployez l'application interne dans un même sous-répertoire /folder plutôt qu'à la racine de test.example.com.

Trois ) Un et deux sont souvent peu susceptibles de se produire... Si vous avez de la chance, l'application interne n'utilise que deux ou trois sous-répertoires et ceux-ci ne sont pas utilisés sur votre site principal , écrivez simplement un tas de lignes 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/

Quatre ) Créez un sous-domaine distinct pour l'application interne et renversez simplement tout :

<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>

Cinq ) Parfois, les développeurs sont complètement désemparés et que leurs applications génèrent non seulement des URL absolues, mais incluent même la partie nom d'hôte dans leurs URL et le code HTML résultant ressemble à ceci :<img src=http://test.example.com/icons/logo.png> .

A ) Vous pouvez utiliser la solution combinée d'un DNS à horizon partagé et du scénario 4. Les utilisateurs internes et externes utilisent test.example.com, mais votre DNS interne pointe directement vers l'adresse IP du serveur de test.example.com. Pour les utilisateurs externes, l'enregistrement public de test.example.com pointe vers l'adresse IP de votre serveur Web public www.example.com et vous pouvez alors utiliser la solution 4.

B ) Vous pouvez en fait demander à apache non seulement de faire des requêtes proxy à test.example.com, mais aussi de réécrire le corps de la réponse avant qu'il ne soit transmis à vos utilisateurs. (Normalement, un proxy ne réécrit que les en-têtes/réponses HTTP). mod_substitute dans apache 2.2. Je n'ai pas testé s'il s'empile bien avec mod_proxy, mais peut-être que ce qui suit fonctionne :

<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>

Solution 2 :

En complément de la réponse de HBruijn, si vous optez pour la solution (3) "ProxyPass", vous devrez peut-être également utiliser mod_proxy_html pour réécrire certaines URL dans vos pages HTML.

cf. Comment gérer correctement les URL relatives avec un proxy inverse pour quelques exemples.

Comme exemple appliqué, voici comment vous pouvez configurer Apache en utilisant le ProxyHTMLURLMap règle pour tout transférer sur votre-nom-de-domaine.com/pad à votre instance Etherpad s'exécutant localement sur le port 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]

Solution 3 :

Vous pouvez utiliser la méthode suivante pour créer un proxy inverse :
1. Installez mod_proxy_html

    yum install mod_proxy_html
  1. Charger le module mod_proxy_html

    LoadModule proxy_html_module modules/mod_proxy_html.so
    
  2. Et utilisez le paramètre suivant

    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>  
    

J'espère que cette aide.


Linux
  1. Comment installer Odoo 10 sur CentOS 7 avec Nginx en tant que proxy inverse

  2. Comment installer Odoo 10 sur Ubuntu 16.04 avec Apache comme proxy inverse

  3. Comment installer Odoo 10 sur Ubuntu 16.04 avec Nginx en tant que proxy inverse

  4. Comment installer Odoo sur Ubuntu 20.04 avec Nginx en tant que proxy inverse

  5. Comment installer Odoo 12 sur Ubuntu 18.04 avec Nginx en tant que proxy inverse

Comment installer Varnish Reverse Proxy avec Nginx sur Ubuntu 16.04 LTS

Authentification HTTP de base avec Nginx

Comment installer GlassFish avec Nginx en tant que proxy inverse sur Debian 10

Comment installer WildFly avec Nginx en tant que proxy inverse sur Debian 10

Comment installer Odoo 14 sur Ubuntu 20.04 avec Apache comme proxy inverse

Comment configurer Tomcat avec Nginx en tant que proxy inverse sur Ubuntu 18.04