【问题标题】:Nginx holding page without rewriting imagesNginx 保持页面不重写图片
【发布时间】:2015-01-13 20:50:14
【问题描述】:

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

【问题讨论】:

  • 好吧,为了获取您的图像,向您的服务器发出请求。那台服务器发送什么?对...您可能希望扩展您的检查 $maintenance = on 以排除对您的图像的请求。
  • 请原谅我的无知,我几乎没有使用 Nginx 的经验,但是我该怎么做呢?我试过用谷歌搜索,但所有结果似乎都在谈论设置位置,而不是在 if 语句中放置类似的东西
  • 这取决于你的配置是什么样的。上面的文件是你所有的 Nginx 配置还是你也有一些位置块?

标签: nginx


【解决方案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";

或者,您可以检查磁盘上是否存在文件,而不是将变量$maintenance 设置为1。这样您就不必重新加载 Nginx 配置以将您的站点置于维护模式。但是,您将在每个请求上添加一个额外的磁盘查找,这可能是您选择该选项的原因。在这种情况下,请在更改 $maintenance 值后运行以下命令:

sudo service nginx force-reload 

【讨论】:

  • 这成功了!非常感谢!不过,我无法让 cookie 工作。它开始说 $maintenance 不是 if 语句的有效参数,但除此之外,这正是我正在寻找的
  • 很高兴能提供任何帮助。在我自己的环境中测试和调整之后,我重写了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多