注意:我对这种情况还很陌生!
我们如何设法将维护期间的每个请求重定向到表明网站处于维护模式的页面?
我想自动化这个过程(通过 cron):
- 关闭 Apache
- 进行维护(在此期间,每个请求都应重定向到维护页面)
- 启动 Apache
在第 2 点中,当 Apache 宕机时,我该如何重定向每个请求,或者人们如何管理这个(自动化)?感谢您的回复。
谢谢
答案1
如果您只想在维护期间使网站无法访问,并像 ubuntu 和 debian 那样在每个虚拟主机上使用一个文件(/etc/apache2/sites-available
和sites-disabled
),您只需禁用网站,从 sites-available 中删除链接(或将文件移出)。您还可以创建一个“捕获所有”网站并启用它显示“维护消息”。
另一个选项是使用 iptables 将 http 端口上的所有流量重定向到服务器上的另一个端口,您可以在该端口运行辅助 Web 服务器(lighttpd 或 nginx 或任何可以提供静态 html 页面的非常小的服务器)。规则如下:
iptables -t nat -A PREROUTING -p tcp -i ethX -d <server ip> –dport 80 -j DNAT –to <server ip>:<new port>
您还可以完全重定向到另一个服务器/端口。
答案2
Apache 需要保持运行才能为网站提供服务,但你可以使用 DocumentRoot 指令将其配置为将所有请求发送到维护网页。假设你在维护目录中创建了一个用于维护通知的页面,它将如下所示:
正常操作:
DocumentRoot "/var/www/html"
#DocumentRoot "/var/www/html/maintenance"
维护操作:只需注释掉正常操作并取消注释维护行:
#DocumentRoot "/var/www/html"
DoucmentRoot "/var/www/html/maintenance"
然后只需重新加载 Apache 即可激活更改:/etc/init.d/httpd reload
。完成后,只需逆转该过程即可。
请注意,如果您有多个 VirtualHost,则需要对每个 VirtualHost 进行 DocumentRoot 更改。可能有(很可能有)更简单的方法 - 对于简单的设置,这就是我所做的。
答案3
我无法谈论 Apache,但这是我在 IIS 中执行此操作的方法(顺便说一句,在我看来,它具有更好的界面)。
- 我有这个网站在一个文件夹中(显然)
- 我在另一个文件夹中有另一个站点,即“维护站点”。
- 我只是在维护之前更改了网站上的文件夹。
IIS / ASP.NET 还具有一个很好的机制,即“阻止文件”将整个站点转为维护模式。这是通过将页面“app_offline.htm”放入站点的根文件夹来实现的。缺点是,在此模式下您无法在另一个 URL 下测试站点(这可能适合最后一次内部检查以确保所有功能都正常)。所以,我去了维护站点。
我认为,拥有一个单独的文件夹并重定向网站是最快的方法。