前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用nginx error_page 对404 文件做冗余

使用nginx error_page 对404 文件做冗余

作者头像
三杯水Plus
发布2018-11-14 16:07:57
1.5K0
发布2018-11-14 16:07:57
举报
文章被收录于专栏:运维运维

使用nginx error_page 对404 文件做冗余

源由:多个图片服务器图片有差异,可能会出现访问某一台服务器出现404,现在需要不管怎样访问都能访问到。

思路:打算使用下面三个方法,由于时间太短方法1应该可行但是没时间,方法2简单的测试下没有通过,方法3成了唯一选择查了多方资料才搞定,发现网上很多资料不全,按照配置应该不能出现意料的结果,现在总结如下。

后续:后续看效果,不知道有没有bug,造成死循环等故障。

1,lua脚本

2,proxy_next_upstream

3,error_page

主体:

一、参考资料

proxy_intercept_errors

http://tengine.taobao.org/nginx_docs/cn/docs/http/ngx_http_proxy_module.html

当后端服务器的响应状态码大于等于400时,决定是否直接将响应发送给客户端,亦或将响应转发给nginx由error_page指令来处理。

upstream

http://tengine.taobao.org/nginx_docs/cn/docs/http/ngx_http_upstream_module.html

max_fails=number

设定Nginx与服务器通信的尝试失败的次数。在fail_timeout参数定义的时间段内,如果失败的次数达到此值,Nginx就认为服务器不可用。在下一个fail_timeout时间段,服务器不会再被尝试。 失败的尝试次数默认是1。设为0就会停止统计尝试次数,认为服务器是一直可用的。 你可以通过指令proxy_next_upstream、 fastcgi_next_upstream和 memcached_next_upstream来配置什么是失败的尝试。 默认配置时,http_404状态不被认为是失败的尝试。

fail_timeout=time

设定 统计失败尝试次数的时间段。在这段时间中,服务器失败次数达到指定的尝试次数,服务器就被认为不可用。 服务器被认为不可用的时间段。 默认情况下,该超时时间是10秒。

error_page

http://tengine.taobao.org/nginx_docs/cn/docs/http/ngx_http_core_module.html#error_page

如果内部跳转时无需改变URI,可以将错误处理转到一个命名路径:

代码语言:javascript
复制
location / {
    error_page 404 = @fallback;
}
location @fallback {
    proxy_pass http://backend;
}

如果处理uri产生了错误,那么nginx将最后一次出错的HTTP响应状态码返回给客户端,也就是说备用服务器还是不行的话会直接展示这台服务器的响应码。

二、相关配置:

代码语言:javascript
复制
server  {
    listen 80;
    server_name  test.com;
    index       index.html index.htm;
    location / { 
        proxy_pass http://online;
        error_page 404 = @fallback;
        proxy_intercept_errors on;
    }
    location @fallback {
        proxy_pass http://backend;
    }
}
upstream online {
         server 192.168.88.18:80;
         server 192.168.88.28:80;
}
upstream backend {
         server 192.168.88.38:80;
}

三、测试:

test1.html在第一台服务器上,test2.html在第二台服务器上,test3.html哪里都没有

代码语言:javascript
复制
192.168.88.188 - - [09/Nov/2016:17:07:13 +0800] "GET /test1.html HTTP/1.1" 200 24 "-" "curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5" -
192.168.88.188 - - [09/Nov/2016:17:07:15 +0800] "GET /test2.html HTTP/1.1" 200 22 "-" "curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5" -
192.168.88.188 - - [09/Nov/2016:17:27:47 +0800] "GET /test3.html HTTP/1.1" 404 583 "-" "curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5" -
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-11-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档