Nginx持有页面而不重写图像

时间:2015-01-13 10:44:14

标签: nginx

我正在尝试在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文件一样。

1 个答案:

答案 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