Chr*_*ltz 8 reverse-proxy mod-proxy apache-2.4
我正在尝试为具有 localhost 静态资源副本的反向代理服务器设置故障转移,这些资源通常由内容管理系统提供服务。我曾经wget
为了故障转移的目的抓取动态站点的静态副本。
我尝试使用类似于Apache 的 ProxyPass 指令的回退位置的配置?让事情开始,这是一个相当简单的,但我在标题中遇到错误。
这是我的(经过消毒的)代理配置:
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>
Run Code Online (Sandbox Code Playgroud)
(在这里,我已经注释掉了进入真正 CMS 系统的平衡器成员——那部分工作得很好——这样我就可以测试本地的静态副本。)
有一个index.html
文件,/var/www/www.example.com/site-backup/www.example.com/
当我尝试点击时它确实被加载了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
Run Code Online (Sandbox Code Playgroud)
但是当浏览器加载该图像时,我会收到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 的配置中包含代理子模块。参考:http : //test.example.com/site/
我注意到错误消息中显示的 URL 在 URL 中有一个额外/site/
的,所以我认为它被加倍了,因为我试图提供一个 URL 空间,包括/site/
一个包含目录的 URL 空间/site/
,wget
现在可能并不完美,所以我创建了来自/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
. 由于 URL 混淆,这应该解决了任何愚蠢的问题。
但这似乎并没有解决任何问题。mod_proxy
仍在抱怨协议。mod_proxy_http
肯定已启用,因为ProxyPass
CMS的正常指令按预期工作(启用时)。
我确定这是我遗漏的一件相当简单的事情,但我似乎无法弄清楚。任何帮助将不胜感激。
Chr*_*ltz 16
脸掌
事实证明,我在ProxyPass
指令中遗漏了一个斜杠:
ProxyPass "/site/" "balancer://cms"
Run Code Online (Sandbox Code Playgroud)
本来应该:
ProxyPass "/site/" "balancer://cms/"
Run Code Online (Sandbox Code Playgroud)
(注意引号前的斜杠。)
这从字面上固定了一切。
如果人们想将其关闭为“简单的印刷错误”,我很高兴删除此问题和答案,但我暂时将其保留。如果我得到一些了这个答案的投票,我会删除此说明,并认为这是任何人谁可能犯同样的错误公共服务。
就我而言,我需要proxy_ajp
模块。
a2enmod proxy proxy_http proxy_ajp
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
53870 次 |
最近记录: |