Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1593435
  • 博文数量: 101
  • 博客积分: 2465
  • 博客等级: 中尉
  • 技术积分: 2126
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-09 15:39
个人简介

https://minminmsn.com/

文章分类

全部博文(101)

文章存档

2018年(2)

2017年(2)

2016年(11)

2015年(14)

2014年(9)

2013年(16)

2012年(47)

分类: 服务器与存储

2016-11-09 18:36:37

使用nginx error_page 对404 文件做冗余

源由:多个图片服务器图片有差异,可能会出现访问某一台服务器出现404,现在需要不管怎样访问都能访问到。
思路:打算使用下面三个方法,由于时间太短方法1应该可行但是没时间,方法2简单的测试下没有通过,方法3成了唯一选择查了多方资料才搞定,发现网上很多资料不全,按照配置应该不能出现意料的结果,现在总结如下。
后续:后续看效果,不知道有没有bug,造成死循环等故障。
1,lua脚本
2,proxy_next_upstream
3,error_page


主体:
一、参考资料
proxy_intercept_errors
当后端服务器的响应状态码大于等于400时,决定是否直接将响应发送给客户端,亦或将响应转发给nginx由指令来处理。

upstream
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
如果内部跳转时无需改变URI,可以将错误处理转到一个命名路径:
location / {
    error_page 404 = @fallback;
}
location @fallback {
    proxy_pass
}
如果处理uri产生了错误,那么nginx将最后一次出错的HTTP响应状态码返回给客户端,也就是说备用服务器还是不行的话会直接展示这台服务器的响应码。


二、相关配置:
server  {
    listen 80;
    server_name  test.com;
    index       index.html index.htm;

    location / { 
        proxy_pass
        error_page 404 = @fallback;
        proxy_intercept_errors on;
    }
    location @fallback {
        proxy_pass
    }
}

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哪里都没有
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" -

阅读(3267) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~