Nginx 当上游服务器返回失败时的处理办法

95

Syntax: proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 |http_504 | http_403 | http_404 | http_429 | non_idempotent | off ...;
Default:
proxy_next_upstream error timeout;
Context: httpserverlocation

生效前提:没有向客户端发送任何内容 如果向上游服务器发送一个字节说明已经发送生效了 这个指令就失效了

  1. 配置:error:与服务器建立连接、向其传递请求或读取响应头时出错;
  2.  timeout:与服务器建立连接、向其传递请求或读取响应头时发生超时;
  3.  invalid_header:服务器返回空响应或无效响应;
  4.  http_:http_500、http_403 等这样错误
  5.  non_idempotent:
  6.  off:关闭这个功能
Syntax: proxy_next_upstream_timeout time;
Default:
proxy_next_upstream_timeout 0;
Context: httpserverlocation

限制将请求传递到下一个服务器的时间。0值关闭此限制

Syntax: proxy_next_upstream_tries number;
Default:
proxy_next_upstream_tries 0;
Context: httpserverlocation

限制将请求传递到下一个服务器的可能尝试次数。0值关闭此限制

代码演示:

server {
        listen       8080;
        server_name  shopp.com.cn;
     

      location /httperr{
           proxy_pass http://nextups;
           proxy_next_upstream http_500; #与下面类同 将错误限定在 500错误的时候 
      }

        location /error {
                proxy_pass http://nextups;
                proxy_connect_timeout 1s;
                proxy_next_upstream error; #当设置为非off得时候,假如一台上游服务器无法链接比如 8012服务器宕机了,那么用户请求会转发到8011端口,但是如果设置为off的话 则返回502错误

        }
}    

upstream nextups{
        server 192.168.0.51:8012;
        server 192.168.0.51:8011;
}
Syntax: proxy_intercept_errors on | off; 假如上游服务器发送返回错误码大于300的时候,如果是off则将上游服务器错误信息返回给客户端,如果是on的话 则error_page指令就生效了
Default:
proxy_intercept_errors off;
Context: httpserverlocation
        error_page 500 502 503 504 /test.txt;
         location /intercept {
                root html;
                proxy_pass http://192.168.0.51:8013;
                proxy_intercept_errors on;#当指令启用为on时 则 error_page就生效了 目前指定了文件路径 使用了root指令

        }    

原文地址:https://www.cnblogs.com/jackey2015/p/10438998.html

时间: 2024-10-17 10:46:40

Nginx 当上游服务器返回失败时的处理办法的相关文章

微信现金红包接口本地测试成功,服务器上失败后的解决办法

本地测试成功后,基本上确定代码还是可用的. 那么本地跟服务器就剩下配置上的区别了. 现金红包接口api 是需要带证书的.所以呢,iis配置有所不同. asp.net 4.0 + iis 8.0  配置环境 1 打开iis   点击 应用程序池 2 点击最右侧的  右上角   设置应用程序池默认设置 3 设置 里面的参数,把 加载用户配置文件 项  改为  true 重启下 iis  再试试  服务器上的接口是否变得正常了呢.

VS2012出现加载失败时的解决办法 win7同样适用

今天更新了WIN8系统补丁,然后就出现了大量的问题,特别是经常用的软件像VS2012 老是加载失败,还说是缺少什么包一类的,弄了好长段时间终于解决了,现在将经验分享下 工具/原料 VS2012+WIN8 方法/步骤 先看问题,打开昨天工作的VS2012项目显示加载失败,多试几次还是不行,提示该项目需要用户输入,或是去C盘看一个什么样的文件夹.   不一会儿的时间,VS2012的项目界面下就会出现下面所示的界面,未能正确加载,此程序可能是配置或是安装另一程序导致   找到微软发布的相应更新包,连接

服务器返回的各种HTTP状态码介绍

HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码.它由 RFC 2616 规范定义的,并得到RFC 2518.RFC 2817.RFC 2295.RFC 2774.RFC 4918等规范扩展. 所有状态码的第一个数字代表了响应的五种状态之一. 100系列码 从 100到199范围的HTTP状态码是信息报告码.基于各种原因考虑,大多数情况下我们 是很少看见这些代码的.首先,如果一个浏览器尝试访问一个网站,而网站返回这些代码时,它们往往都不会显示在

服务器返回的各种HTTP状态码介绍(转)

HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码.它由 RFC 2616 规范定义的,并得到RFC 2518.RFC 2817.RFC 2295.RFC 2774.RFC 4918等规范扩展. 所有状态码的第一个数字代表了响应的五种状态之一. 100系列码 从100到199范围的HTTP状态码是信息报告码.基于各种原因考虑,大多数情况下我们 是很少看见这些代码的.首先,如果一个浏览器尝试访问一个网站,而网站返回这些代码时,它们往往都不会显示在屏

js当图片返回404时如何展示默认图片

在做项目时遇到一个问题,当图片返回失败时,例如404的情况,不能正常的显示,刚开始是用vue.js做的,部分代码如下 <dt> <img v-bind:src="getHeadPic(user.headPic)" alt=""></dt> methods:{ getHeadPic:function(headPic){ if(headPic != null && headPic != undefined &&

Nginx 如何处理上游响应的数据

93 一个非常重要的指令 proxy_buffer_size 指令限制头部响应header最大值 proxy_buffering 指令主要是指 上游服务器是否接受完完整包体在处理 默认是on 也就是接收完后再处理 proxy_buffers 指令 是指 如果包体大小超过设置大小 则向磁盘写入该包体 否则就不写入 proxy_max_temp_file_size 指令是指 限制包体写入磁盘最大值 proxy_temp_file_write_size 指令是指每次写入磁盘大小 proxy_temp_

Nginx之优雅处理上游服务器错误码

当上游服务器无法响应请求时,便会返回50x状态码,这里我们可以进行错误优化处理,会显示的更加友好. 示例如下: # 方法1:从本地磁盘提供错误页面 server { error_page 500 502 503 504 /50x.html; location =/50x.html { root html; } # 方法2:从外部网站提供错误页面 server { error_page 500 http://www.test.com/50x.html; } 若这里为代理到一组上游服务器的话,也可以

Nginx 反向代理如何连接上游服务器

92 想上游服务器先建立TCP连接 如三次握手 下面指令可以控制握手时间 proxy_next_upstream  指令当出现502可以换个上游服务器 Tcp keepalive 一般都是由进程在操作的  主要降低性能消耗 默认是off proxy_bind 应用场景 一般有两个 当Nginx上有多个IP地址时,不要使用系统默认IP地址 而主动使用某个IP地址 透传IP地址 原文地址:https://www.cnblogs.com/jackey2015/p/10431020.html

在服务器上处理请求时出现未知错误。服务器返回的状态码为500

操作方法: 为页面的ScriptManager控件添加EnablePartialRendering="false"的属性  此方法不是直接解决或规避问题的,是为了将详细的页面错误显示出来,以便找到需要修正 的地方,个人觉得这才是正道嘛,不能躲避错误,而应尽量不让错误发生. ---> 找出错误  -- > 修改. <asp:ScriptManager ID="ScriptManager" runat="server" Enable