当我准备测试一些变化时,我想我会设置一个维护页面块,以便我可以进行测试。
刚刚意识到,nginx 的维护块示例使所有人都无法访问该网站。
您如何向访问者提供维护页面并仍然允许本地主机访问。
我是否应该创建一个新的服务器块来监听另一个端口并拒绝所有端口,而允许 127.0.0.1?
答案1
我的做法是,我的网站有两个副本,一个是实时的,一个是开发中的。我使用 svn checkout 来检查我的开发版本,并在其中进行测试,当更改测试并准备就绪后,我会将它们 rsync 到实时环境中。
因为您正在进行更改而拥有维护页面实际上没有必要,除非您正在对查询需要几分钟才能运行的数据库进行更改。
但要回答您的实际问题,位置块并不关心谁在请求页面,只关心 URI。一种解决方法是使用访问模块拒绝除您之外的任何人访问,然后将错误页面定义为维护页面。
答案2
不要使用会导致错误的访问模块(如 Martin Fjordvald 建议的那样),而403 Forbidden
应该考虑返回使用503 Service Temoporarily Unavailable
自定义错误页面:
server {
# ... usual configuration here ...
error_page 503 @maintenance;
# Use this line if page is currently in maintenance mode
return 503;
location @maintenance {
rewrite ^ /maintenance.html break;
}
}