阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

使用nginx error_page 对404 文件做冗余

211次阅读
没有评论

共计 2781 个字符,预计需要花费 7 分钟才能阅读完成。

使用 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,可以将错误处理转到一个命名路径:

location / {

    error_page 404 = @fallback;

}

location @fallback {

    proxy_pass http://backend;

}

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

二、相关配置:

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

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” –

更多 Nginx 相关教程见以下内容

CentOS 6.2 实战部署 Nginx+MySQL+PHP http://www.linuxidc.com/Linux/2013-09/90020.htm

搭建基于 Linux6.3+Nginx1.2+PHP5+MySQL5.5 的 Web 服务器全过程 http://www.linuxidc.com/Linux/2013-09/89692.htm

CentOS 6.3 下 Nginx 性能调优 http://www.linuxidc.com/Linux/2013-09/89656.htm

CentOS 6.3 下配置 Nginx 加载 ngx_pagespeed 模块 http://www.linuxidc.com/Linux/2013-09/89657.htm

Ubuntu 16.04 LTS 上安装 Nginx、MariaDB 和 HHVM 运行 WordPress http://www.linuxidc.com/Linux/2016-10/136435.htm

Nginx 安装配置使用详细笔记 http://www.linuxidc.com/Linux/2014-07/104499.htm

Linux(RHEL7.0)下安装 Nginx-1.10.2 http://www.linuxidc.com/Linux/2016-10/136484.htm

Nginx 日志过滤 使用 ngx_log_if 不记录特定日志 http://www.linuxidc.com/Linux/2014-07/104686.htm

Nginx 的详细介绍:请点这里
Nginx 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-12/138215.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计2781字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中