如果我的 (Rails) 应用程序停机或正在进行数据库维护或其他什么情况,我希望在 nginx 级别指定以提供静态页面。因此每个 URL 都像http://example.com/* 应该提供静态 html 文件,例如 /var/www/example/foo.html。
尝试在我的 nginx 配置中指定这一点导致我出现适合和无限循环等等。
我正在尝试
location / {
root /var/www/example;
index foo.html;
rewrite ^/.+$ foo.html;
}
如何让域名上的每个 URL 都提供单个静态文件?
答案1
添加两个位置,如下所示:
location = /foo.htm {
root /var/www/example;
index foo.html;
}
location / {
rewrite ^/.+$ /foo.htm;
}
答案2
我不太确定,但是如果 Rails 服务器出现故障,就会出现错误 500。也许你可以使用错误页面指令类似
error_page 500 /staticpage.html
答案3
使用命名位置,它在重定向期间不会改变 URI。
此代码片段处理“rails is down”的情况。
error_page 504 @rubydown; # 504 - gateway timeout
location @rubydown {
internal;
root /var/www;
rewrite ^ /504.html break;
}
对于维护通知,您可以在根位置使用类似的东西......
location / {
root /var/www;
try_files /maintaince.html @rails;
}
location @rails {
internal;
proxy_pass http://rails.backend;
# blablabla proxy_pass setting for Rails
}
创建文件 /var/www/maintaince.html.tmpl,写入所需文本。在维护工作之前创建类似的 simlinkln -s /var/www/maintaince.html.tmpl /var/www/maintaince.html
或重命名文件。维护工作完成后,删除 simlink 或将文件重命名。
答案4
以下应将所有请求重定向至/var/www/example/foo.html
。
地点 / { 根/var/www/示例; 索引 foo.html; # 在下面的try_files指令中,请求永远不会达到=404。 尝试文件/foo.html =404; }