Bonjour,
J'ai un souci avec la conf d'un proxy apache.
Sur un serveur de mon réseau local je souhaite faire un proxy vers ma freebox
en gros j'ai 2 machine:
192.168.0.1 : le proxy
192.168.0.254 : la box
Le but et de rediriger : http://192.168.0.1/freebox/ vers http://192.168.0.254/
La conf simple avec Proxypass et Proxypassreverse fonctionne bien mais le truc c'est que dans les page HTML et aussi le .js et .css certaines images ont le src sous la forme /im/lechemin/image.png au lieu de im/lechemin/image.png .
Du coup le navigateur va chercher l'image dans http://192.168.0.1/im/lechemin/ au lieu de http://192.168.0.1/freebox/im/lechemin/
J'ai résolut la partie HTML avec la directive ProxyHTMLURLMap / /freebox/
Cela a pour effet de modifier l'HTML a la volée en changeant les liens mais cela n'a aucun effet sur le .js et les .css
Pour les .js (notamment celui qui gère les checkbock), j'ai essayé les directives ProxyHTMLMeta On et ProxyHTMLExtended On sans succès.
Si quelqu'un sait comment on peut faire pour résoudre ce point (si c'est possible) l'idéale serai d'éviter les rewrites car ca m'empêcherai d'avoir un vrai dossier http://192.168.0.1/im/ (même si j'en aurai surement jamais mais j'essaye de faire les choses bien sans bidouillage tant que c'est possible).
voici ma conf :
<VirtualHost *:80>
ProxyPreserveHost on
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Location /freebox/ >
#config de la redirection
ProxyPass http://192.168.0.254/
ProxyPassReverse /
#activation de la modification des pages HTML (pour les images qui sont dans /img )
SetOutputFilter proxy-html
ProxyHTMLInterp On
#definition de ce qu'il faut modifier dans les pages html
ProxyHTMLURLMap / /freebox/
#on modifie aussi dans le head (aucun effet sur les .js)
ProxyHTMLMeta On
#on modifie aussi le javascript et les style (aucun effet sur les .js )
ProxyHTMLExtended On
</Location>
</VirtualHost>
Merci d'avance.
# erreur dans la config ?
Posté par NeoX . Évalué à 1.
d'apres ton fichier
mais d'apres l'exemple fournit dans la doc http://httpd.apache.org/docs/2.2/mod/mod_proxy.html
donc il faudrait peut-etre faire plus simple dans ton virtualhost :
1°) virer tout le paragraphe location /freebox
2°) et ne mettre que la directive proxy suivante
A verifier aussi, tu as une option "Proxy Preserve host ON" dans ton fichier
[^] # Re: erreur dans la config ?
Posté par bibitte . Évalué à 1. Dernière modification le 05 janvier 2013 à 11:52.
Pour le Proxy Preservehost ON c'est un oubli d'un test que j'avais fais,je l'ai viré et ca ne change rien.
De ce que j'ai compris la façon de faire que tu propose équivaut a la ce que j'ai écrit sauf qu'elle n'est pas dans un bloc location et elle s'applique donc a tout le virtualhost.
mais dans le doute j'avais déjà testé et ca ne change rien.
Mon problème ce n'est pas les directives proxypass , cela fonctionne très bien. C'est que la directive ProxyHTMLURLMap / /freebox/ ne transforme que le code HTML et mon problème avec les URL commençant par / se trouve également dans les .js et ceux-ci ne sont pas modifiés.
[^] # Re: erreur dans la config ?
Posté par NeoX . Évalué à 3.
essaie avec un domaine plutot qu'un sous-dossier.
http://freebox.cheztoi.com -> http://192.168.0.254
ca marchera mieux avec les chemins relatifs des contenus (images et scripts)
# autre question
Posté par NeoX . Évalué à 2.
j'ai l'impression que tu essaie de rebondir de l'exterieur vers ta box apres une redirection de port.
si ce n'est pas le cas et juste parce que tu as un proxy sur ton reseau, tu dois pouvoir lui dire de ne pas passer par le proxy pour 192.168.0.254
ainsi ton poste client demandant 192.168.0.254 sera directement envoyé sur cette IP
[^] # Re: autre question
Posté par bibitte . Évalué à 1.
Effectivement le but est que cela fonctionne aussi depuis l’extérieur.
Je sais que je pourrai activer l’accès de la box depuis l’extérieur mais je fais clairement ca plus pour l'exercice que pour avoir une vrai utilité.
A part n'avoir qu'une adresse à retenir et juste changer de dossier sans changer de port (un dossier c'est plus parlant) pour accéder aux différents serveurs on est d'accord ca ne sert a rien.
Merci quand même d'avoir apporté une réponse.
# j'ai trouvé
Posté par bibitte . Évalué à 2.
Je viens de trouver une solution pas trop mal.
je vous explique:
En cherchant sur le net j'ai finis par trouver 2 choses :
- Le mod proxy_html ne peux pas modifier les .js ni les .css .
- Le mod Apache2::ModProxyPerlHtml (module perl qu'on utilse via le mod perl d'apache) peu le faire.
J'ai donc installer le mod perl pour appache puis Apache2::ModProxyPerlHtml via CPAN.
Enfin j'ai modifier ma config comme ci dessous :
le reste du fichier ne change pas et est identique au fichier de conf d'une installation d'apache vierge.
Vous remarquerez la directive PerlAddVar ProxyHTMLURLMap "/im /freebox/im" contient le/im et pas uniquement le / j'ai du mettre me limiter à /im car si je ne mettais que PerlAddVar ProxyHTMLURLMap "/ /freebox/" j'avais des / dans du code javascript qui étaient remplacés par /freebox/ et du coup le javascript plantait.
Voilà, je remercie de m'avoir aidé.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.