我想为我的网站设置一个维护页面(访问者会看到),但我也想让devs能够访问网站并测试一些东西(虽然这最后一点,访问开发者,是一个项目经理的请求......不确定这是最好的方法,因为我们应该在登台服务器上进行测试。)
该站点基于nodejs,并通过proxy_pass在nginx服务器上运行。
我在apache下完成此操作的方法是允许传入get参数,这样可以避免dev被重定向到维护页面。似乎无法弄清楚如何使用proxy_pass在nginx下执行此操作。
我能够将所有内容重定向到维护页面,但图像和CSS已损坏且无法加载。另外,我无法实现GET参数覆盖。
有关如何处理此问题的任何建议?关于网络的各种教程和SO上的评论似乎不起作用,我怀疑它与proxy_pass的使用有关。不确定。
*编辑:我看到了this post on SO,但我尝试实现它最终导致访问者被重定向到“/ maintenance”并收到服务器错误而不是我的维护页面。此外,它不会解决覆盖重定向问题。
答案 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;
}