Je dois exécuter un site WordPress desservi via une application Web Apache2 et Java utilisant Tomcat sur le même serveur.
Lorsque les utilisateurs accèdent à example.com
ou example.com/public-pages
, ils doivent être servis à partir de WordPress , mais lorsqu'ils arrivent à example.com/private-pages
ils doivent être servis à partir du Tomcat .
J'ai demandé cette question sur serverfault où ils ont suggéré d'utiliser différents ports, différentes adresses IP et sous-domaines.
Je veux utiliser la solution different port
car cela signifie que je n'aurai besoin que d'un certificat SSL.
J'ai essayé de faire la méthode du proxy inverse en ayant ce qui suit dans mon default-ssl.conf
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost
ServerName localhost:443
DocumentRoot /var/www
<Directory /var/www>
#For Wordpress
Options FollowSymLinks
AllowOverride All
</Directory>
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyRequests Off
ProxyPass /private-pages ajp://localhost:8009/
ProxyPassReverse /private-pages ajp://localhost:8009/
SSLEngine on
SSLProxyEngine On
SSLCertificateFile /etc/Apache2/ssl/Apache.crt
SSLCertificateKeyFile /etc/Apache2/ssl/Apache.key
</VirtualHost>
Comme vous l'avez remarqué, j'utilise mod_proxy_ajp
dans Apache2 pour cela. Et que mon Tomcat écoute le port 8009
puis diffuse du contenu. Alors maintenant, quand je vais sur example.com/private-pages
, je vois le contenu de mon Tomcat. Mais 2 problèmes se produisent.
example.com/css/*
. Cela ne fonctionnera manifestement pas car il se traduit par example.com:80/css/*
au lieu de example.com:8009/css/*
& il n'y a pas de telles ressources dans le WordPress répertoire.example.com/private-pages/abcd
je suis en quelque sorte renvoyé au site WordPress (qui affiche évidemment une page de 404 pages).Je peux comprendre pourquoi le n ° 1 est en train de se produire, mais n'ai aucune idée du pourquoi du n ° 2. Quoi qu’il en soit, s’il existe une autre solution propre pour résoudre ce problème, j’apprécierais votre aide.
J'ai finalement pu résoudre le problème en faisant plusieurs choses.
Voici le fichier des hôtes virtuels,
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost
ServerName localhost:443
DocumentRoot /var/www
<Directory /var/www>
#For Wordpress
Options FollowSymLinks
AllowOverride All
</Directory>
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPreserveHost On
ProxyRequests Off
ProxyPass /private-pages ajp://localhost:8009/private-pages
ProxyPassReverse /private-pages ajp://localhost:8009/private-pages
<Location /private-pages>
Order allow,deny
Allow from all
</Location>
SSLEngine on
SSLProxyEngine On
SSLCertificateFile /etc/Apache2/ssl/Apache.crt
SSLCertificateKeyFile /etc/Apache2/ssl/Apache.key
</VirtualHost>
Je vous suggère d'utiliser mod_rewrite pour spécifier quel répertoire obtiendra le proxy inverse. Une partie de votre problème vient du fait que les règles de réécriture de WordPress volent des demandes du proxy. Si vous utilisez mod_rewrite pour le proxy, vous pouvez alors spécifier [L]
pour indiquer que la règle de proxy est la dernière dernière règle de réécriture et que la WordPress les règles de réécriture ne doivent pas être utilisées.
ProxyRequests off
RewriteEngine on
RewriteRule ^/private-pages ajp://localhost:8009/ [P,L]
ProxyPassReverse /private-pages ajp://localhost:8009/
Pour résoudre votre problème CSS, vous pouvez utiliser mod_proxy_html , lequel pourrait être configuré pour réécrire tout le code HTML renvoyé par le proxy et remplacer les références à /css/
par /private-pages/css
.
Vous pouvez également modifier l'application Web en cours d'exécution dans Tomcat7 pour qu'elle prenne connaissance du proxy. mod_proxy peut être configuré pour envoyer des en-têtes via:
. Il envoie également les en-têtes x-forwarded
que votre application Web pourrait examiner et savoir qu’elle s’exécute dans une situation de proxy inverse.