Existe-t-il un moyen de connecter Apache à Tomcat à l'aide d'un proxy HTTP, de sorte que Tomcat obtienne le nom d'hôte entrant correct plutôt que l'hôte local? J'utilise cette directive dans Apache:
ProxyPass /path http://localhost:8080/path
Mais cela arrive en tant que localhost, ce qui est inutile lorsque nous avons plusieurs sites sur le même serveur. Je pourrais définir l'hôte manuellement dans la configuration du serveur:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
proxyName="pretend.Host" proxyPort="80" />
Mais cela encore ne sert pas plus d'un site. Et je n'aime pas l'idée d'utiliser un port interne différent pour chaque site, cela semble vraiment moche.
N'y a-t-il aucun moyen de transférer le port lorsque je le proxy?
(Si vous demandez pourquoi je n'utilise pas seulement AJP, la réponse est cette erreur . J'essaie tout ce que je peux avant d'abandonner/ Tomcat et Apache entièrement )
Les paramètres que vous recherchez sont:
<VirtualHost *:80>
ServerName public.server.name
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>
Notez que nous utilisons localhost comme cible proxy. Nous pouvons le faire puisque nous activons ProxyPreserveHost . La documentation indique que
Il est surtout utile dans les configurations spéciales telles que l'hébergement virtuel basé sur le nom en masse avec proxy, où l'en-tête d'origine de l'hôte doit être évalué par le serveur principal.
ce qui ressemble exactement à ce que vous faites.
Je pense que votre meilleur pari si vous voulez plusieurs sites sur le même serveur est d'utiliser des hôtes virtuels dans votre configuration Apache. Voici un exemple:
<VirtualHost *:80>
ServerName server.domain.com
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://server.domain.com:8080/
ProxyPassReverse / http://server.domain.com:8080/
<Location />
Order allow,deny
Allow from all
</Location>
Tant que server.domain.com est enregistré dans votre DNS externe, le nom d'hôte entrant sera affiché dans les URL du client. J'utilise un seul serveur hébergeant 6 sites distincts, dont 3 de retour par Tomcat, en utilisant cette méthode.
Vous pouvez toujours utiliser AJP, et vous devriez le faire puisqu'il est plus rapide que HTTP. Assurez-vous simplement de l'activer dans http.conf:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
Dans ce cas, cette configuration fonctionne pour moi:
<VirtualHost *:80>
ServerName public.server.name
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / ajp://localhost:8080/
# ProxyPassReverse might not be needed,
# it's only for redirecting from inside.
# ProxyPassReverse / ajp://localhost:8080/
</VirtualHost>