文档章节

解决Nginx负载均衡重复提交问题

霖vv
 霖vv
发布于 2018/05/10 22:53
字数 514
阅读 201
收藏 0

Nginx [测试环境 Tengine version: Tengine/2.2.0 (nginx/1.8.1)] 作为负载均衡时,若后端某个服务器超时,Nginx 会将请求重新发送到另一个服务器,如果是读操作会没问题,若请求是写操作,则可能会发生重复提交问题。即某个请求在 a 服务器上提交了一次,在 b 服务器上又提交了一次。

解决方法很简单,将 proxy_next_upstrea 设置为 off 或按照下面文档设置即可。

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: http, server, location

Specifies in which cases a request should be passed to the next server:

  • error an error occurred while establishing a connection with the server, passing a request to it, or reading the response header;
  • timeout a timeout has occurred while establishing a connection with the server, passing a request to it, or reading the response header;
  • invalid_header a server returned an empty or invalid response;
  • http_500 a server returned a response with the code 500;
  • http_502 a server returned a response with the code 502;
  • http_503 a server returned a response with the code 503;
  • http_504 a server returned a response with the code 504;
  • http_403 a server returned a response with the code 403;
  • http_404 a server returned a response with the code 404;
  • http_429 a server returned a response with the code 429 (1.11.13);
  • non_idempotent normally, requests with a non-idempotent method (POST, LOCK, PATCH) are not passed to the next server if a request has been sent to an upstream server (1.9.13); enabling this option explicitly allows retrying such requests;
  • off disables passing a request to the next server.

One should bear in mind that passing a request to the next server is only possible if nothing has been sent to a client yet. That is, if an error or timeout occurs in the middle of the transferring of a response, fixing this is impossible.

The directive also defines what is considered an unsuccessful attempt of communication with a server. The cases of error, timeout and invalid_header are always considered unsuccessful attempts, even if they are not specified in the directive. The cases of http_500, http_502, http_503, http_504, and http_429 are considered unsuccessful attempts only if they are specified in the directive. The cases of http_403 and http_404 are never considered unsuccessful attempts.

Passing a request to the next server can be limited by the number of tries and by time.

还有一个重复次数设置。

Syntax: proxy_next_upstream_tries number;
Default: proxy_next_upstream_tries 0;
Context: http, server, location

本文转载自:https://www.qiansw.com/resolving-nginx-load-balancing-repeated-commit-problems.html

霖vv

霖vv

粉丝 25
博文 193
码字总数 118270
作品 0
朝阳
程序员
私信 提问
Nginx 负载均衡(简单配置)

网上看到的简单部署方案以及自己的测试,笔记一下。 一、Nginx作为负载均衡的优点 1工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构,它的正则规则比HAPro...

槑槑的嫑嫑
2018/01/11
0
0
硬件负载均衡和软件负载均衡

LB 简单比较 – F5、NetScaler、LVS、Nginx、Haproxy 负载均衡技术是构建大型网站必不可少的架构策略之一。它的目的是,把用户的请求分发到多台后端的设备上,用以均衡服务器的负载。我们可以...

robin_key
2017/05/31
0
0
负载均衡器技术Nginx和F5的优缺点对比

对于数据流量过大的网络中,往往单一设备无法承担,需要多台设备进行数据分流,而负载均衡器就是用来将数据分流到多台设备的一个转发器。   目前有许多不同的负载均衡技术用以满足不同的应...

Zero零_度
2015/04/17
5.6K
2
LVS,Nginx及HAProxy三种负载均衡器比较

三种负载均衡器的优缺点: LVS负载均衡 lvs优点: 1.抗负载能力强,工作在第4层仅作分发之用没有流量的产生。这个特点也决定了它在负载均衡软件里的性能最强的;无流量,同时保证了均衡器IO的...

运维小当家
2018/06/29
0
0
公司使用nginx做负载均衡,最近老是有http请求重复提交。设置了proxy_next_upstream off也不行。nginx记录了一条日志,tomcat记录了两次请求日志,怎么办?

公司使用nginx做负载均衡,最近老是有http请求重复提交。设置了proxy_next_upstream off也不行。nginx记录了一条日志,tomcat记录了两次请求日志,怎么办?...

小桥流水凌凌漆
2018/04/11
2K
2

没有更多内容

加载失败,请刷新页面

加载更多

使用原生css+js+html实现打印A4纸张的功能页面

有时候我们需要使用html+css实现打印A4纸张的功能页面,以下代码实现 <!DOCTYPE html><html lang="zh-CN"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatibl......

b0cloud
29分钟前
5
0
读组件化之MGJRouter源码第二次的收获与思考

上一次我们写好了一个自定义的 路由类 ,然后我们来制作自己的 库 ,可以用来被 pod 引入 : 库的制作参考:https://www.jianshu.com/p/928d2ab053be 以下是我创建的: 利用上篇提到的 ,组件...

T型人才追梦者
30分钟前
3
0
spring cache、ehcache的使用及集成

项目中需要加缓存,故学习了 1、spring cache、ehcache的使用及集成 2、缓存的命中率等统计数据 一、spring cache 1、概述 Spring 3.1 引入了基于注解(annotation)的缓存(cache)技术 2、...

qkKing
32分钟前
4
0
Windows 10上源码编译Poco并编写httpserver和tcpserver | compile and install poco cpp library on windows

本文首发于个人博客https://kezunlin.me/post/9587bb47/,欢迎阅读! compile and install poco cpp library on windows Series guide to compile and install poco cpp library on windows g......

kezunlin
33分钟前
4
0
if-else-if-else与switch的区别

if-else-if-else: 适合分支较少 判断条件类型不单一 支持取 boolean 类型的所有运算 满足条件即停止对后续分支语句的执行 switch: 适合分支较多 判断条件类型单一,JDK 1.7 之前仅支持 in...

ConstXiong
33分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部