aaa
J'essaie de mettre en place un reverse proxy avec Apache.
Ça fonctionne presque mais un problème persiste.
J'utilise des hôtes virtuels pour chaque site web derrière le proxy basés sur le nom (plusieurs entrés dans le DNS pour la même IP).
Exemple:
Site A : a.domaine.fr:80
Site B : b.domaine.fr:443
Je peux joindre mes deux sites sur leur adresse (http et https) mais si je rentre l'URL http://b.domaine.fr je tombe sur le site A et inversement. Si je rentre l'URL https://a.domaine.fr, j'arrive sur le site B.
Voila la conf d'Apache :
ServerRoot "/usr/local"
Listen 1.2.3.4:80
Listen 1.2.3.4:443
LoadModule include_module libexec/apache22/mod_include.so
LoadModule log_config_module libexec/apache22/mod_log_config.so
LoadModule logio_module libexec/apache22/mod_logio.so
LoadModule deflate_module libexec/apache22/mod_deflate.so
LoadModule headers_module libexec/apache22/mod_headers.so
LoadModule proxy_module libexec/apache22/mod_proxy.so
LoadModule proxy_http_module libexec/apache22/mod_proxy_http.so
LoadModule proxy_html_module libexec/apache22/mod_proxy_html.so
LoadFile /usr/local/lib/libxml2.so
#LoadModule xml2enc_module libexec/apache22/mod_xml2enc.so
LoadModule proxy_connect_module libexec/apache22/mod_proxy_connect.so
LoadModule ssl_module libexec/apache22/mod_ssl.so
<IfModule !mpm_netware_module>
<IfModule !mpm_winnt_module>
User www
Group www
NameVirtualHost 1.2.3.4:80
NameVirtualHost 1.2.3.4:443
<VirtualHost 1.2.3.4:80>
ServerName a.domaine.fr:80
ServerAdmin help@domaine.fr
ProxyRequests off
ProxyPass / http://a.interne.domaine.fr:8180/
ProxyHTMLURLMap http://a.interne.domaine.fr:8180 /
<\Location />
ProxyPassReverse /
ProxyHTMLEnable On
ProxyHTMLURLMap / /
RequestHeader unset Accept-Encoding
<\/Location>
</VirtualHost>
<VirtualHost 1.2.3.4:443>
ServerName b.domaine.fr:443
ServerAdmin help@domaine.fr
ProxyRequests off
SSLEngine on
SSLProxyEngine On
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /usr/local/etc/apache22/ssl/mycert.crt
SSLCertificateKeyFile /usr/local/etc/apache22/ssl/mykey.key
ProxyPass / https://b.interne.domaine.fr/
ProxyHTMLURLMap https://b.interne.domaine.fr/ /
<\Location />
ProxyPassReverse /
ProxyHTMLEnable On
ProxyHTMLURLMap / /
RequestHeader unset Accept-Encoding
<\/Location>
</VirtualHost>
Pouvez-vous m'expliquer le problème ? Je ne maitrise pas beaucoup Apache.
# virtualhost sur IP:PORT
Posté par NeoX . Évalué à 4.
du coup quand tu vas sur
http://b.domaine.fr
ca se convertit en 1.2.3.4:80 => donc dans le dossier de A
et si tu vas sur
https://a.domaine.fr
ca devient 1.2.3.4:443 => et donc ton apache renvoie dans le dossier de B
il faut faire tes virtualhost sur le domaine et pas sur IP
[^] # Re: virtualhost sur IP:PORT
Posté par Doude . Évalué à 1.
J'ai essayé de remplacer le couple IP/PORT dans le champs mais le problème est toujours le même.
J'ai trouvé le paramètre _default_ à placer dans le champs <VirtualHost _default_:*> mais je n'arrive pas à l'utiliser dans mon cas.
[^] # Re: virtualhost sur IP:PORT
Posté par NeoX . Évalué à 2.
servername a.domaine.fr:80 ?
[^] # Re: virtualhost sur IP:PORT
Posté par nullard3d . Évalué à 1.
Dans ce cas, je crois qu'Apache, lorsqu'il ne trouve pas de ServerName correspondant parmi les VirtualHost IP:PORT de la connexion, renvoie le premier trouvé.
Et comme A est le seul sur le port 80, et B le seul sur le port 443, ils seront toujours renvoyés pour les connexions sur chacun de ces ports.
Une astuce qui me vient à l'esprit serait de faire une redirection systématique :
(après la def. de B)
<VirtualHost 1.2.3.4:80>
ServerName b.domaine.fr
Redirect / https://b.domaine.fr/
</VirtualHost>
(après la def. de A)
<VirtualHost 1.2.3.4:443>
ServerName a.domaine.fr
Redirect / http://a.domaine.fr/
</VirtualHost>
Plus d'infos :
http://httpd.apache.org/docs/2.2/mod/mod_alias.html#redirect
Mais ça risque de ne pas marcher très bien dans le sens https->http à cause de :
http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html#vhosts
Si tu trouves une autre astuce, ça m'intéresse, n'hésite pas à la signaler.
Bien joué pour le port dans le ServerName, je ne connaissais pas non plus :)
http://httpd.apache.org/docs/2.1/mod/core.html#servername
[^] # Re: virtualhost sur IP:PORT
Posté par Doude . Évalué à 1.
Je pensais que le tag "_default_" serait plus approprié.
Je continu de chercher et je vous tiens au courant.
Merci pour l'info à propos des connexions HTTPS, je n'y avais pas songé. Du coup ça limite beaucoup le fonctionnement de mon reverse proxy et je ne sais pas si je dois continuer à envisager cette solution.
[^] # Re: virtualhost sur IP:PORT
Posté par Doude . Évalué à 1.
J'ai donc opté pour la solution du redirect pour le cas par défaut.
Merci de ton aide.
# et un simple port forwarding ?
Posté par NeoX . Évalué à 1.
1.2.3.4:80 en adresse IP interne du site A:8180
et
1.2.3.4:443 en adresse IP interne du serveur B
ce ne serait pas plus simple ?
un port forwarding au niveau du retour serait tout aussi efficace
sauf si le proxy est là pour mettre en cache/filtrer du contenu
# Name-Based Virtual Hosting avec différents hôtes virtuels
Posté par Doude . Évalué à 1.
Il n'est pas possible d'identifier différents hôtes virtuels SSL car tant que le handshake SSL n'est pas terminé, Apache ne peut pas obtenir le champs HOST de l'entête HTTP qui permet d'identifier l'hôte virtuel à appeler.
Mais pour effectuer le handshake, Apache à besoin de connaître la config SSL (cipher suite, the server certificate, etc.) indiqué dans la config de l'hôte virtuel. Ainsi, ça se mord la queue.
cf. : http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html#vhosts
Je comprends bien le problème, mais j'ai fais le test avec la conf que j'ai précédemment indiquée et ça fonctionne.
J'ai deux hôtes virtuels définit sur deux nom DNS pointant vers l'IP de mon proxy et le reverse proxy fonctionne bien sur ces deux URL en HTTPS.
J'utilise Apache 2.2.15 sur une FreeBSD 8.0-RELEASE.
La doc Apache ne serait pas à jour et les dernières versions corrigeraient ce problème ?
[^] # Re: Name-Based Virtual Hosting avec différents hôtes virtuels
Posté par NeoX . Évalué à 2.
donc je dirais que oui, il y a peut-etre eu des ameliorations
[^] # Re: Name-Based Virtual Hosting avec différents hôtes virtuels
Posté par Doude . Évalué à 1.
Dans la doc 2.2, on comprend que la nouvelle spécification Server Name Indication (SNI) permet de pallier au problème. A condition que le client supporte cette norme.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.