共计 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