J'essaie de configurer le basculement pour un serveur proxy inversé avec une copie statique de ressources localhost qui seraient généralement servies par un système de gestion de contenu. J'ai utilisé wget
pour récupérer une copie statique du site dynamique à des fins de basculement.
J'ai essayé d'utiliser une configuration similaire à emplacement de secours pour la directive ProxyPass d'Apache? pour commencer, et c'est assez simple, mais je reçois l'erreur dans le titre.
Voici ma configuration de proxy (aseptisée):
DocumentRoot /var/www/www.example.com/htdocs
ProxyRequests Off
ProxyPreserveHost On
ProxyPass "/site/" "balancer://cms"
ProxyPassReverse "/site/" "balancer://cms"
ProxyPassReverse "/site/" "http://ip-10-1-1-229.ec2.internal/site/"
<Proxy "balancer://cms">
#BalancerMember "http://ip-10-1-1-229.ec2.internal/site/" loadfactor=1
# For localhost services, a backup of the CMS's site
BalancerMember "http://127.0.0.1/site-backup/www.example.com/site/" loadfactor=10 status=+H
</Proxy>
<Directory "/var/www/www.example.com/htdocs/site-backup">
Order allow,deny
Allow from all
Options Indexes FollowSymlinks
DirectoryIndex index.html
</Directory>
(Ici, j'ai commenté le membre de l'équilibreur qui va au vrai système CMS - cette partie fonctionne très bien - pour que je puisse tester la copie statique locale.)
Il y a un index.html
fichier dans /var/www/www.example.com/site-backup/www.example.com/
et il se charge lorsque j'essaie d'appuyer sur http://www.example.com/site/
, mais aucune des autres ressources de la page (CSS, images, etc.) n'est chargée. Ils ont des URL dans la page comme:
J'ai un fichier, foo.png
à cet endroit:
/var/www/www.example.com/htdocs/site-backup/www.example.com/site/sites/default/files/foo.png
Mais lorsque cette image est chargée par le navigateur, j'obtiens un 500 Internal Server Error
réponse et je vois cela dans le journal des erreurs de httpd:
[proxy: avertir] [pid 3182: tid 2838395712] [client 71.127.40.115:38208] AH01144: Aucun gestionnaire de protocole n'était valide pour l'URL /site/site/sites/default/files/foo.png. Si vous utilisez une version DSO de mod_proxy, assurez-vous que les sous-modules proxy sont inclus dans la configuration à l'aide de LoadModule., Referer: http://test.example.com/site/
J'ai remarqué que l'URL indiquée dans le message d'erreur contient un /site/
dans l'URL, j'ai donc pensé que cela doublait parce que j'essaie de servir un espace URL comprenant /site/
à partir d'un répertoire contenant /site/
et wget
n'est probablement pas parfait en ce moment, j'ai donc créé un lien symbolique à partir de /var/www/www.example.com/site-backups/www.example.com/site/site/sites
->
/var/www.www.example.com/site-backups/www.example.com/site/sites
. Cela aurait dû corriger toute folie due à la confusion des URL.
Mais cela ne semblait rien arranger; mod_proxy
se plaint toujours du protocole. mod_proxy_http
est définitivement activé, car la directive normale ProxyPass
vers le CMS fonctionne comme prévu (lorsqu'elle est activée).
Je suis sûr que c'est une chose assez simple qui me manque, mais je n'arrive pas à le comprendre. Toute aide serait grandement appréciée.
facepalm
Il s'avère que je manquais une barre oblique de fin dans ma directive ProxyPass
:
ProxyPass "/site/" "balancer://cms"
aurait du être:
ProxyPass "/site/" "balancer://cms/"
(Notez la barre oblique avant le guillemet de fermeture.)
Cela a littéralement tout réglé.
Je suis heureux de supprimer cette question et d'y répondre si les gens veulent la fermer en tant que "simple erreur typographique", mais je vais la laisser pour l'instant. Si j'obtiens p votes sur cette réponse, je supprimerai cette note et la considérerai comme un service public pour quiconque pourrait faire la même erreur.
Dans mon cas, j'avais besoin de proxy_ajp
module.
a2enmod proxy proxy_http proxy_ajp
Comme kujiy j'ai dû ajouter le mod_ajp
.
J'utilise Apache4.
Mon journal montrait les messages comme suit:
No protocol handler was valid for the URL /jira.
If you are using a DSO version of mod_proxy,
make sure the proxy submodules are included in
the configuration using LoadModule
j'ai donc ajouté (je veux dire sans commentaire) la ligne suivante à mon httpd.conf:
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
enregistré et redémarré le serveur Apache.