使用httpd mod_proxy_balancer的“没有对URL有效的协议处理程序”

我正在尝试使用通常由内容pipe理系统提供的本地静态资源静态副本为反向代理服务器设置故障转移。 我已经使用wget获取dynamic站点的静态副本以实现故障转移。

我试过使用类似于Apache的ProxyPass指令的后退位置的configuration? 让事情开始,这是一个相当简单的,但我得到的标题中的错误。

这是我的(消毒)代理configuration:

 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> 

(在这里,我已经评论了进入真正的CMS系统的平衡器成员 – 这一部分工作得很好 – 这样我就可以testing本地静态副本。)

/var/www/www.example.com/site-backup/www.example.com/有一个index.html文件,当我尝试点击http://www.example.com/site/ ,但没有页面的其他资源(CSS,图像等)被加载。 他们在页面中的url如下所示:

我有一个文件,在这个位置的foo.png

 /var/www/www.example.com/htdocs/site-backup/www.example.com/site/sites/default/files/foo.png 

但是,当这个图像被浏览器加载时,我得到一个500 Internal Server Error响应,我在httpd的错误日志中看到这个:

[proxy:warn] [pid 3182:tid 2838395712] [client 71.127.40.115:38208] AH01144:没有协议处理程序对URL /site/site/sites/default/files/foo.png有效。 如果您正在使用mod_proxy的DSO版本,请确保代理子模块包含在使用LoadModule。,referer的configuration中: http : //test.example.com/site/

我注意到,错误消息中显示的URL在URL中有一个额外的/site/ ,所以我认为它得到了一倍,因为我试图从包含/site/wget的目录中提供包括/site/的URL空间现在可能并不完美,所以我从/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创build了一个符号链接/var/www.www.example.com/site-backups/www.example.com/site/sites 。 由于URL混淆,这应该是愚蠢的。

但是这似乎并没有解决任何问题。 mod_proxy仍然抱怨协议。 mod_proxy_http是肯定启用的,因为CMS的正常ProxyPass指令按预期工作(启用时)。

我相信这是一个相当简单的事情,我想念,但我似乎无法弄清楚。 任何帮助将不胜感激。

捂脸

事实certificate,我在我的ProxyPass指令中丢失了一个斜线:

 ProxyPass "/site/" "balancer://cms" 

本来应该:

 ProxyPass "/site/" "balancer://cms/" 

(请注意紧密报价前的斜线。)

这从字面上解决了一切。

我很高兴删除这个问题,并回答如果人们想要closures它作为“简单的印刷错误”,但我现在就离开它。 如果我在这个答案上得到一些赞成票,我会删除这个票据,并认为这是一个公共服务,任何人都可能犯同样的错误。

在我的情况下,我需要proxy_ajp模块。

 a2enmod proxy proxy_http proxy_ajp 

和kujiy一样,我不得不添加mod_ajp

我正在使用apache4。

我的日志显示消息如下:

 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 

所以我添加(我的意思是取消注释)以下行到我的httpd.conf:

 LoadModule proxy_ajp_module modules/mod_proxy_ajp.so 

保存,并重新启动Apache服务器。