Nginx转发时的重复订单问题

来源:互联网 发布:淘宝好的女装店铺 编辑:程序博客网 时间:2024/05/16 07:55

当我们使用Nginx作为负载均衡使用,使其可以在cluster的不同节点之间进行分发的时候,出现了重复订单问题。重复的订单在不同的节点上各有一个,并且时间间隔相差1分钟,因此是Nginx的超时配置导致的毫无疑问。

当然,默认情况下的Nginx的超时设置理论上来说是合理的,只不过我们的订单服务需要外接门店系统,受限于门店系统不得不把订单系统的超时时间设置的超长。

这当然就导致了--如果没有修改Nginx的超时配置的话--Nginx认为第一次派发出去的节点出了问题,然后向其他的节点重新派发。

 

修改的关键之处是使Nginx允许的超时时间超过订单服务自己允许的超时时间。

 

关键属性配置:
   proxy_read_timeout 600;
   proxy_send_timeout 600;

 

而proxy_connect_timeout属性保持默认就好,如果只是处理时间长,那连接时间依旧应该很短,2s足以。

 

以下作为示例:

#user  nobody;worker_processes  1;#error_log  logs/error.log;#error_log  logs/error.log  notice;#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {    worker_connections  1024;}http {    include       mime.types;    default_type  application/octet-stream;server_names_hash_bucket_size 1024;    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '    #                  '$status $body_bytes_sent "$http_referer" '    #                  '"$http_user_agent" "$http_x_forwarded_for"';    access_log  logs/access.log;    sendfile        on;    #tcp_nopush     on;    #keepalive_timeout  0;    keepalive_timeout  65;    #gzip  on;upstream cluster {server node#1:80 weight=3 max_fails=2 fail_timeout=450s;server node#2:80 weight=3 max_fails=2 fail_timeout=450s;}    server {        listen       80;        server_name  dns#1;location / {proxy_pass http://cluster/;proxy_next_upstream     error timeout invalid_header http_404;        proxy_connect_timeout   2;proxy_read_timeout 600;proxy_send_timeout 600;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}    }    server {        listen       80;        server_name  dns#2;location / {proxy_pass http://cluster/;proxy_next_upstream     error timeout invalid_header http_404;        proxy_connect_timeout   2;proxy_read_timeout 600;proxy_send_timeout 600;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}    }}


 

 

0 0