Comment configurer mod_proxy en ProxyPass basé sur http vs https?

9

J'ai Apache Tomcat en cours d'exécution avec SSL activé. J'ai Apache HTTP Server agissant comme un proxy inverse, donc si mes utilisateurs frappent http: // myserver / tomcat / ils sont passés à http: // myserver: 8080 .

ProxyPass /tomcat/ http://myserver:8080/
ProxyPassReverse /tomcat/ http://myserver:8080/

J'ai également un serveur HTTP Apache configuré pour SSL, donc lorsque les utilisateurs frappent https: // myserver / tomcat / ils doivent être transmis à https: // myserver: 8443 / .

Avec la configuration actuelle de ProxyPass et ProxyPassReverse, ils vont être redirigés vers l'URL non SSL. Comment puis-je configurer le proxy pass pour qu'il redirige vers différents protocoles et ports en fonction de la demande entrante?

Autrement dit, si quelqu'un entre via HTTPS, comment puis-je le rediriger vers mon tomcat @ https: // myserver: 8443 ?


Mise à jour:

@ mike-insch

J'ai essayé:

NameVirtualHost *:443

<VirtualHost *:80>
    ProxyPass /tomcat/ http://myserver:8080/
    ProxyPassReverse /tomcat/ http://myserver:8080/
</VirtualHost>

<VirtualHost *:443>
    ProxyPass /tomcat/ https://myserver:8443/
    ProxyPassReverse /tomcat/ https://myserver:8443/
</VirtualHost>

Maintenant, quand je visite: https: // myserver / tomcat / j'obtiens "page non trouvée". Dans le journal des erreurs, je vois "Le fichier n'existe pas: / var / apache2 / htdocs / tomcat"

Ce qui est correct, mais je m'attendais à ce que la demande soit acheminée vers tomcat s'exécutant sur https: // myserver: 8443 / .

Je suppose que je dois regarder davantage les hôtes virtuels, à moins que quelque chose ne paraisse manifestement faux.

codecraig
la source
Je ne pense pas que vous ayez besoin de la NameVirtualHostdirective ici. De plus, vous devrez ajouter les directives appropriées pour activer SSL dans votre <VirtualHost *:443>section.
Mike Insch

Réponses:

5

Vous devez le faire via deux <VirtualHost *:X>directives indépendantes . Vos HTTPdirectives entrent à l'intérieur <VirtualHost *:80>tandis que vos HTTPSdirectives entrent <VirtualHost *:443>. Ajustez si nécessaire si votre serveur a plusieurs hôtes virtuels basés sur l'adresse ou le nom configurés. Voir la documentation Apache 2 pour plus de détails.

Mike Insch
la source
J'ai donc ajouté ce qui suit: NameVirtualHost *: 443
codecraig
3
N'oubliez pas d'ajouter la directive SSLProxyEngine on
Ryan
6

Pour être complet: si c'est une option, c'est une bonne idée de mettre fin à SSL chez Apache, plutôt que de laisser Tomcat le gérer également. Fournir Tomcat n'est accessible qu'à partir d'Apache, c'est plus simple et non moins sécurisé.

Dans cette configuration, Apache procède au proxy HTTP et HTTPS pour http://myserver:8080/:

NameVirtualHost *:443

<VirtualHost *:80>
    ProxyPass /tomcat/ http://myserver:8080/
    ProxyPassReverse /tomcat/ http://myserver:8080/
</VirtualHost>

<VirtualHost *:443>
    ProxyPass /tomcat/ http://myserver:8080/
    ProxyPassReverse /tomcat/ http://myserver:8080/
</VirtualHost>
David Carboni
la source
1
Dans ce cas, vous n'avez pas besoin de répéter les directives proxy dans les deux VirtualHosts. Vous pouvez simplement les extraire dans le contexte du serveur.
Amit Naidu du