0

我想为我的网站设置一个维护页面(访问者会看到),但我也想让开发人员有一种方式仍然能够访问该网站并测试东西(尽管最后一点,开发人员的访问权限是一个请求来自项目经理...不确定这是最好的方法,因为我们似乎应该在登台服务器上进行测试)。

该站点基于 nodejs,并通过 proxy_pass 在 nginx 服务器上运行。

我在 apache 下这样做的方式是允许传入一个 get 参数,这将允许开发人员避免被重定向到维护页面。似乎无法弄清楚如何在 nginx 下使用 proxy_pass 执行此操作。

我能够将所有内容重定向到维护页面,但图像和 css 已损坏并且无法加载。此外,我无法实现 GET 参数覆盖。

关于如何解决这个问题的任何建议?网络上的各种教程和这里关于 SO 的评论似乎不起作用,我怀疑它与 proxy_pass 的使用有关。不确定。


*编辑:我在 SO 上看到了这篇文章,但我尝试实现它最终导致访问者被重定向到“/maintenance”并收到服务器错误而不是我的维护页面。此外,它不解决覆盖重定向的问题。

4

1 回答 1

1

这将是您决定如何过滤用户的问题。如果您可以过滤 IP 地址、cookie 或其他请求方面的访问,则可以使用if指令将所有其他用户重定向/重写到维护页面。你提到使用 GET 参数——这种情况就是一个例子(使用$arg_PARAMETER这里记录的):

server {
    if ($arg_secret != "123456") {
        rewrite ^(.*)$ /maintenance$1 break;
    }
    location /maintenance {
        #root directive etc
    }
    location / {
        #proxy_pass directive etc
    }
}

或者您可以反转条件和配置,并且只有 proxy_pass 条件为真。但是,``if` 指令可能会出现问题(请参阅http://wiki.nginx.org/IfIsEvil),因此请在部署之前尝试。

至于您发现的图像和 CSS 无法加载的问题,您需要确保始终继续提供这些维护资源,因为它们也可能受到重定向规则的影响。一个示例location指令可能是这样的:

location ~ /(.*\.css|.*\.jpg) {
    root /var/www/maintenance;
}
于 2014-04-18T07:02:51.837 回答