设置特定 URL 的超时 NGINX

设置特定 URL 的超时 NGINX

我已经在 StackOverflow 上问过这个问题,但不幸的是没有人回答。

我目前正在使用 NGINX 作为我创建的 API(apache)的反向代理(因为我正在使用一些 docker 容器)。我已经删除了大多数超时,因为我的一些请求将花费不到 60 秒的时间,这不是问题。

但是,我的一个请求绝对不应该超过 3 秒,如果超过 3 秒,我想取消它并发送一个空的响应。

我之所以需要这样做,是因为有时我的 apache 会过载(客户端排队)并且 TTL 会变得非常大。如果是这种情况,我真的需要终止对 api.webservice.me/public/js 的请求(它不应该被阻塞并加载太久)。而且在 apache 端执行此操作毫无用处,因为请求 api.webservice.me/public/js 的人会在队列中等待。

正确的做法是什么?

所以我需要的是:

60 seconds timeout for api.webservice.me/public/anything
60 seconds timeout for api.webservice.me/public/second-request
3 seconds timeout for api.webservice.me/public/js

如果可能的话,用空的 200 状态进行响应

这是处理我的 API 的部分

# api.website.me
upstream api.website.me {
    ip_hash;
    ## Can be connected with "nginx-proxy" network
    # serverapi_webservice_9
    server 172.18.0.13:80;
}
server {
    server_name api.website.me;
    listen 443 ssl http2 ;
    access_log /var/log/nginx/access.log vhost;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'XXXXX'
    ssl_prefer_server_ciphers on;
    ssl_session_timeout 5m;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;
    ssl_certificate /etc/nginx/certs/api.website.me.crt;
    ssl_certificate_key /etc/nginx/certs/api.website.me.key;
    location / {
        proxy_pass http://api.website.me;
    }
}
server {
    server_name api.website.me;
    listen 80 ;
    access_log /var/log/nginx/access.log vhost;
    location / {
        proxy_pass http://api.website.me;
    }
}

答案1

proxy_read_timeout

proxy_read_timeout 3s;

定义从代理服务器读取响应的超时时间。超时时间仅在两次连续的读取操作之间设置,而不是针对整个响应的传输。如果代理服务器在此时间内未传输任何内容,则连接将关闭。

相关内容