nginx上的维护页面,最佳实践


13

我想配置服务器以在存在时显示维护页面。我尝试了这段代码并工作:

location / {
    try_files /maintenance.html $uri $uri/ @codeigniter;
}

但是我注意到它会带有200个状态代码,并且可能导致搜索引擎混乱。我认为最佳做法是返回503状态代码。在google上,我找到了一些与相关的页面,例如。但是,它们使用if进行重定向,根据nginx文档,使用ifs是不安全的。

有没有不使用if的方法吗?在这种情况下可以安全使用吗?

谢谢。

Answers:


7

我认为最佳做法是返回500状态代码。

我认为您的意思是503,而不是500。

他们if用来进行重定向,根据nginx文档,使用ifs是不安全的。

不,只有return100%安全的内部iflocation环境。

根据nginx文档,您可以将HTTP状态代码指定为的最后一个参数try_files。我已经尝试过了,但是没有用。


21

这是我的工作。

            if (-f $document_root/maintenance.html) {
                    return 503;
            }
            error_page 503 @maintenance;
            location @maintenance {
                    rewrite ^(.*)$ /maintenance.html break;
            }

如果文件存在,它将显示维护页面。删除文件后,您将恢复正常。


1
是的,这就是问题链接中的相同代码。我实际上是在问if这种情况下使用s 是否安全,因为不应根据文档使用它。
NeDark 2011年

1
与该文档相同:In some cases it's also possible to move ifs to server level (where it's safe as only other rewrite module directives are allowed within it).Mike所显示的维护error_page通常是在服务器{}上下文中设置的。
Regan

1
除了不检查文件是否存在而执行“ return 503”外,我做了同样的事情。这样,我可以通过符号链接启用/禁用站点(使用Debian的“可用站点” /“启用站点”布局)并打开维护页面。
阿斯凡德·卡兹

1
听起来这会降低性能:NGINX将需要为每个请求检查文件的存在性
Marc

1
马克(Marc),不是因为经常访问的文件存储在内存中的文件系统缓存中。
麦克(Mike)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.