1 votes

apache reverse proxy avec mod rewrite

Je suis en train de configurer un nouvel hôte virtuel sur mon reverse proxy apache avec le mod rewrite, Lorsque je teste la configuration, tout fonctionne bien mais une seule page (page image) ne fonctionne pas. En cliquant sur la page image, j'obtiens l'URL locale dans le navigateur ( https://localserver:9251/share/collab?collabSession=ea4a80bf-6c19-473b-ad08-bdce391dbe19&type=join&user=username&isInitiator=true ).

les ports 9251, 433 et 80 sont activés dans ports.conf

ci-dessous ma configuration des hôtes virtuels :

<VirtualHost *:80>
    ServerName publicdomaine.com
    ServerAlias www.publicdomaine.com
    Redirect Permanent / https://publicdomaine.com
</VirtualHost>

<VirtualHost *:443>
    ServerName publicdomaine.com
    ServerAlias www.publicdomaine.com

    <IfModule mod_proxy.c>
        SetEnv proxy-nokeepalive 1

        SetEnv proxy-initial-not-pooled 1
        ProxyRequests Off
        ProxyPreserveHost Off

        ProxyPass / https://localserver/
        ProxyPassReverse / https://localserver/
    </IfModule>

    SSLEngine on
    SSLProxyEngine On
    SSLProxyVerify none
    SSLProxyCheckPeerCN off
    SSLProxyCheckPeerName off
    SSLProxyCheckPeerExpire off
    SSLCertificateKeyFile /etc/apache2/cert/mykey.pem
    SSLCertificateFile /etc/apache2/cert/mycert.pem
    SSLCertificateChainFile /etc/apache2/cert/bundle.crt

    RewriteEngine On
    LogLevel alert rewrite:trace6

    RewriteCond %{QUERY_STRING} ^(.*)&studyUid=(.*)
    RewriteCond %{QUERY_STRING} ^host=publicdomaine.com(.*)$
    RewriteRule ^/ris/web/imageshare/startSession - [E=SUI_VAL:%1]

    RewriteRule /ris/web/imageshare/startSession https://localserver/ris/web/imageshare/startSession?host=cimcsp1.cimy.local%{ENV:SUI_VAL} [P,QSA,L]

    ErrorLog /var/log/signoff-error_log

    CustomLog /var/log/signoff-access_log combined
</VirtualHost>

<VirtualHost *:9251>
    SetEnv proxy-nokeepalive 1
    SetEnv proxy-initial-not-pooled 1
    ProxyRequests Off
    ProxyPreserveHost Off

    ProxyPass / https://localserver:9251/
    ProxyPassReverse / https://localserver:9251/
</VirtualHost>

J'ai observé l'échange http avec fiddler. échange de messages :

GET https://publichostname/ris/web/imageshare/startSession?host=publichostname&studyUid=1.3.51.0.1.1.10.233.24.237.333827.7779290494 HTTP/1.1

le reverse proxy réécrit le paramètre host en localserver :

GET https://publichostname/ris/web/imageshare/startSession?host=localserver&studyUid=1.3.51.0.1.1.10.233.24.237.333827.7779290494 HTTP/1.1

et la réponse est JSON :

{"initiatorLink":"https://localserver:9251/share/collab?collabSession=74bea62c-474a-4ee5-9d74-e793fef66738&type=join&user=username&isInitiator=true","studyUid":"1.3.51.0.1.1.10.233.24.237.333827.7779290494","baseLink":"https://localserver:9251/share/?collabSession=74bea62c-474a-4ee5-9d74-e793fef66738","closedLink":null}

cette réponse me tunnelise à :

CONNECT localserver:9251 HTTP/1.1
Host: localserver:9251

cela devrait être le tunnel moi avec le proxy inverse à :

CONNECT publichostname:9251 HTTP/1.1
Host: publichostname:9251

1voto

Gerald Schneider Points 17588

La meilleure option serait de configurer votre serveur d'application pour générer les URL correctes à utiliser avec le proxy.

Toutefois, si vous ne pouvez pas le faire, vous pouvez utiliser un autre module Apache, mod_proxy_html . Ce module fournit la directive ProxyHTMLURLMap que vous pouvez utiliser pour réécrire la réponse.

ProxyPass / https://localserver/
ProxyPassReverse / https://localserver/
SetOutputFilter proxy-html # make sure the output is filtered by proxy-html
ProxyHTMLURLMap https://localserver:9251/ https://publichostname:9251/
ProxyHTMLExtended On       # by default only HTML output is filtered

Cela devrait réécrire toutes les occurrences de l'URL du serveur local dans la réponse avec l'URL du nom d'hôte public.

Notez que cela impose une charge supplémentaire au serveur web, puisqu'il doit analyser et modifier chaque réponse au lieu de simplement la transmettre. Il est préférable de configurer correctement le serveur d'applications.

0voto

caghiles3 Points 31

Trouvé ! !! J'ai ajouté le mod substtute pour modifier la réponse du serveur et ça marche ! !!!! commande ajoutée :

AddOutputFilterByType SUBSTITUTE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript application/json
Substitute "s|https:\/\/localserver:9251|https:\/\/publichostname:9251|ni"

merci pour votre aide ! !!!

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X