J'essaie de mettre en place un serveur avec plusieurs applications Web qui seront toutes servies via apache VirtualHost (apache fonctionnant sur le même serveur). Ma principale contrainte est que chaque application web doit utiliser le cryptage SSL. Après avoir googlé pendant un certain temps et examiné d'autres questions sur stackoverflow, j'ai écrit la configuration suivante pour VirtualHost:
<VirtualHost 1.2.3.4:443>
ServerName host.example.org
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
SSLProxyEngine On
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / https://localhost:8443/
ProxyPassReverse / https://localhost:8443/
</VirtualHost>
Même si https://host.example.org:8443 est accessible, https://host.example.org ne l'est pas, ce qui va à l'encontre de l'objectif de ma configuration d'hôte virtuel. Firefox se plaint que, même s'il s'est correctement connecté au serveur, la connexion a été interrompue. Je reçois également l'avertissement suivant dans le fichier error.log d'apache:
proxy: no HTTP 0.9 request (with no host line) on incoming request and preserve host set forcing hostname to be host.example.org for uri
Sur l'application Web (un serveur Tomcat), le journal d'accès affiche une étrange demande d'accès:
"?O^A^C / HTTP/1.1" 302
Voici la demande d'accès correcte que j'obtiens lorsque je me connecte directement à https://host.example.org:8443 :
"GET / HTTP/1.1" 302
Enfin, je dois également mentionner que l'hôte virtuel fonctionne parfaitement bien lorsque je n'utilise pas SSL.
Comment puis-je faire fonctionner cela?
la source
ProxyPreserveHost On
est presque toujours faux, inutile et se casse presque toujoursProxyPassReverse
. Comme note latéraleProxyRequests off
est la valeur par défaut, donc redondante.localhost
ne pas fonctionner.Essayez cette config
Si votre application doit avoir accès aux informations SSL à partir de la connexion proxy, vous devez envisager d'utiliser mod_proxy_ajp et le connecteur tomcat ajp1.3.
la source
Mais si votre objectif est d'exécuter plusieurs applications Web activées SSL sur le même serveur. l'ajout d'apache devant ne va pas les équilibrer en utilisant votre configuration ci-dessus, vous auriez toujours besoin d'un équilibreur de charge ou vous pourriez utiliser le module d'équilibrage de proxy d'Apache avec quelque chose comme ceci:
la source
Eh bien, ce que je ne comprends pas ici, c'est pourquoi vous devez avoir une connexion SSL de votre apache à votre application qui semble être sur la même machine ( http: // localhost: 8443 / ).
Je suppose que la façon habituelle de configurer des choses comme celle-ci est d'avoir apache fournissant le cryptage SSL au côté "client", par exemple Internet, et d'avoir une connexion non cryptée à l'application. Cela vous donne également plus de liberté pour déboguer les réponses de votre application.
Dave Cheney a également mentionné l'utilisation du connecteur natif tomcat afin d'avoir l'équilibrage de charge et d'autres fonctionnalités.
la source
Avez-vous vraiment besoin d'un proxy vers un service HTTPS? Vous souhaiterez peut-être un proxy vers le service non SSL dans localhost, par exemple
la source
Je voudrais d'abord voir si vous pouvez faire une demande de localhost à localhost: 8443 et voir si c'est réussi (IE faire un GET ou wget http: // localhost: 8443 )
Je ne sais pas trop pourquoi votre hôte virtuel havin ga écoute sur le port 443 puis le procède à un autre hôte ssl
Pourquoi l'application ne peut-elle pas utiliser 443 en mode natif? si vous ne pouvez pas le changer, vous pouvez simplement utiliser iptables pour rediriger le port
la source
Vérifiez votre journal d'erreurs SSL et assurez-vous que vous n'avez aucune erreur concernant l'impossibilité de vérifier la chaîne de certificats CA.
la source