web-dev-qa-db-fra.com

Comment exécuter WordPress et Java application Web s'exécutant sur Tomcat sur le même serveur?

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.

  1. Toutes mes ressources statiques deviennent 404-ed, donc aucune de mes images, CSS, js ne sont chargées. Je vois que le navigateur demande les ressources à l'aide de l'URL 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.
  2. Si je vais à 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.

1
Chantz

J'ai finalement pu résoudre le problème en faisant plusieurs choses.

  1. Renommé le fichier WAR dans mon Tomcat, dans ce cas pages privées
  2. Dans ma définition d'hôtes virtuels, j'ai modifié ajp: // pour refléter le changement ci-dessus.

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> 
1
Chantz

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.

1