zoukankan      html  css  js  c++  java
  • uwsgi_read_timeout超时处理

    最近发现一服务器一个奇怪的现象:

      Django的视图函数在浏览器一个请求的情况下,竟然做了两个请求的函数处理。不可思议,找了几天也不知道为什么,

    只发现只要用uwsgi_read_timeout之后,如果请求时间超时,Nginx acess log便会记两条同样的log。uwsgi_read_timeout

    指令的含义是如果视图函数处理的时间超时,uwsgi便会关闭连接,这个关闭只是针对Nginx这边的关闭,视图函数还会继续执

    行,处理完成后,视图函数那边会报IO写入错误[不了解的人可以去看看《TCP详解》,关于TCP全双工和半双工]。

      一个请求怎么会有两个处理呢?最后找了问题所在,以下是简单的nginx配置片段:

    uwsgi_connect_timeout 15;
    uwsgi_write_timeout 8;
    uwsgi_read_timeout 8;
    
    upstream up_app {
        server unix:/var/run/socket.sock;
        server 127.0.0.1:9001 backup;   
    }
    
    server {
         ...
        location / {
            inclue uwsgi_param;
            uwsgi_pass up_app;
        }   
        ...
    }

      如果Django 函数视图超过8sec,超时关闭连接,并半请求再次转到backup进程。只要是upstream server超时关闭连接,

    请求便会转到backup进程,从而导致一个请求两个处理。

      那么怎么解决呢,我只要一个请求一个处理,超时就返回504即可。答案就在这里uwsgi_next_upstream。在nginx配置中

    加入uwsgi_next_upstream error即可,原默认为uwsgi_next_upstream error timeout,即只要超时便会将请求转给下一个server.

    问题到此结束!

  • 相关阅读:
    Longest Mountain in Array 数组中的最长山脉
    css 解决 图片 底部 3像素问题
    获取当前年月日2020-09-30格式
    vue + elememt ui table 实现滚屏效果
    滚动字
    layui 之监听 select 的变化
    正则匹配非汉字
    layui form里的select元素动态赋值无效
    layui 之 弹框重新打开 upload无效
    GPS坐标转百度坐标
  • 原文地址:https://www.cnblogs.com/zhuangzebo/p/3847673.html
Copyright © 2011-2022 走看看