我正在尝试在Nginx上为WordPress网站设置保留页面。保留页面已经存在,但在我们移动它之前,该站点曾经在Apache服务器上。
如果启用了维护模式,我可以将其重定向到保留页面,但不显示holding.png
图像。这是我的Nginx代码:
server {
# Set to on to enable holding page
set $maintenance off;
if ($maintenance = on) {
rewrite ^(.*)$ /holding.html break;
}
}
保留图像位于项目的根目录中,就像保留页面HTML文件一样。
答案 0 :(得分:1)
首先,我会让Nginx在维护模式下发送503(服务不可用)HTTP响应代码。这可以防止搜索引擎在离线时索引维护页面。
其次,我会将维护页面的所有静态资产放在一个单独的目录(例如maintenance_files)中,以便它们很好地耦合在一起,并且可以很容易地从重写中排除。
另外,我希望有办法排除某些人,以便他们能够完成维护任务。这可以通过IP或检查cookie来完成。然后,您可以使用粘贴到浏览器检查器中的一段JavaScript设置/取消设置cookie。
server {
error_page 503 @maintenance;
# Set to 1 to enable holding page
set $maintenance 0;
# Always allow access for clients that have the 'maintainer' cookie set
if ($http_cookie ~* "maintainer") {
set $maintenance 0;
}
location / {
if ($maintenance) {
return 503;
}
}
location @maintenance {
# You might want to use a different document root for the maintenance
# files so you can freely move and shuffle in the default document root
# during maintenance.
#root /var/www/maintenance/;
if ($uri !~ ^/maintenance_files/) {
rewrite ^(.*)$ /holding.html break;
}
}
}
要获得维护访问权限,请将其粘贴到浏览器检查器中:
document.cookie="maintainer=1";
删除该Cookie:
document.cookie = "maintainer=; expires=Thu, 01 Jan 1970 00:00:00 UTC";
或者,您可以检查磁盘上是否存在文件,而不是设置为 1 的变量$maintenance
。这样,您就不必重新加载Nginx配置,以使您的站点处于维护模式。但是,您可以在每个请求上添加一个额外的磁盘查找,这可能是您选择的理由。在这种情况下,请在更改$ maintenance值后运行以下命令:
sudo service nginx force-reload