设置Nginx超时和默认JSON响应

时间:2020-05-27 19:43:04

标签: python-3.x nginx timeout falcon bjoern

我有一个简单的Falcon REST API,用于POST请求,该请求接受JSON格式的主体: { "Input": "input string request" } 并返回: { "Output: "output string response" }

可能需要注意的是,在生产中,所有请求都将来自单个客户端,并且该服务应能够处理50 req / sec,平均响应时间低于200ms。理想情况下,这些请求应分批完成,但是由于多种因素,不幸的是,必须以这种方式完成。

我发现Bjoern(与Gunicorn相比)能够以最快的速度为我的应用程序提供服务,并在导致超时之前处理最多的负载。最重要的是运行Nginx,下面粘贴了我的许多默认配置。

我面临的问题是,我看到大约2%的请求超时(由Linux wrk命令行工具确定),我认为这是由于负载造成的。

我想知道是否可以配置Nginx设置响应时间(例如说500毫秒),并且上游服务器是否在响应之前达到了该时间限制,则发送默认的JSON响应和一个空的JSON响应:{ "Output": "" }

是否可以在指定的最长时间内返回所有请求?

提前感谢您的宝贵时间! :)

/etc/nginx/nginx.conf:

worker_processes    auto;

error_log   /app/logs/nginx_error.log    warn;
pid         /var/run/nginx.pid;

events {
    worker_connections  1024;   # max connections per worker process

    multi_accept        on;     
    use                 epoll;  # efficient connection processing method for linux
}

http {
    include         /etc/nginx/mime.types;
    default_type    application/octet-stream;

    log_format  main  '[$time_local] resp_status=$status req_time=$request_time '
                      'upstream_header_time=$upstream_header_time';
    access_log      /app/logs/nginx_access.log   main    buffer=500k    flush=5m;

    sendfile    on;
    tcp_nopush  on;
    tcp_nodelay on;

    #keepalive_timeout   65;   # how long to keep an idle connection alive
    #keepalive_requests  50;

    # proxy_connect_timeout   400ms;
    # proxy_send_timeout      400ms;
    # proxy_read_timeout      400ms;
    # send_timeout            500ms;

    #gzip    on;

    include     /etc/nginx/conf.d/*.conf;
}

/etc/nginx/conf.d/app.conf

upstream app_servers {
    server 0.0.0.0:5000;
}

server {
    listen          8000;
    server_name     localhost;

    location / {
        proxy_pass      http://app_servers;

        # error_page      502  timeout_502;
        # error_page      504  timeout_502;
    }

    # location timeout_502 {
    #     #default_type    application/json;
    #     return          204  '{"Output": ""}';
    # }
}

0 个答案:

没有答案