基于nginx的nodejs站点的维护页面

时间:2014-04-18 05:34:11

标签: node.js redirect nginx maintenance-mode

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

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

我在apache下完成此操作的方法是允许传入get参数,这样可以避免dev被重定向到维护页面。似乎无法弄清楚如何使用proxy_pass在nginx下执行此操作。

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

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


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

1 个答案:

答案 0 :(得分:1)

这将是您决定如何过滤用户的问题。如果您可以过滤对IP地址,cookie或其他请求方面的访问,则可以使用if指令将所有其他用户重定向/重写到维护页面。你提到使用GET参数 - 这个条件就是一个例子(使用$arg_PARAMETER作为documented here):

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;
}