目前,我正在尝试配置我的 squid (3.1) 反向代理,以便在唯一的后端 Web 服务器处于维护状态时始终显示静态网页。无需自动切换。维护模式应通过手动配置更改来激活。
squid 文档和 wiki 在这一点上并没有真正提供帮助。我的想法是阻止每个请求,并显示一个deny_info
带有 200 状态代码的静态网页,如下所示:
acl everyone src 0.0.0.0/0.0.0.0
## Testing with my client ip address:
# acl everyone src 10.123.0.40/32
http_access deny everyone
deny_info 200:/etc/squid/maintenance.html everyone
我把这个片段前任何其他http_access
规则,并尝试了该配置,仅阻止我自己的客户端流量,但使用没有效果squid -k reconfigure
。它可能在我使用时有效sudo service squid restart
,但我现在不想测试它,因为当时有很多用户使用该服务,并且 squid 重新启动大约需要半分钟(每次测试)。
我的问题:
- 对于该目的来说,该配置正确吗?
- 我是否需要使用
sudo service squid restart
才能使更改生效,或者只是出现了什么问题? - 有没有更好的解决方案来显示静态维护页面?
提前致谢。
答案1
- squid 3.1.x 好像已经有一千年的历史了。
- squid 3.x 完全失去了软重构,因此需要重新启动才能应用配置更改。这意味着您将失去与站点的客户端连接。每次都会像一次 flash-DoS 一样。
总结:这使得 squid 不适合在生产环境中用作网站的反向代理。请考虑使用nginx
。
如果你不顾这些警告,仍然打算坚持使用 squid,那么你应该写一篇重定向器这将检查诱饵页面是否应生效,以消除重启问题。此重定向器可以使用您知道的任何脚本语言编写:perl、python、ruby 甚至/bin/sh
。逻辑很简单:重定向器将检查一些标志(例如文件标志)是否应显示诱饵页面,如果不应显示 - 它只会将请求传递给后端。它甚至可以检查此类后端的可行性。
但nginx
该功能开箱即用。