2025-01-06-后端超时还能通过设置Nginx超时时间来解决
后端超时还能通过设置Nginx超时时间来解决?
🌈🌈🌈🌈🌈🌈🌈🌈
欢迎关注公众号(通过文章导读关注:【11来了】),及时收到
AI 前沿项目工具及新技术
的推送发送
资料
可领取深入理解 Redis 系列文章结合电商场景讲解 Redis 使用场景
、中间件系列笔记
和编程高频电子书
!文章导读地址:
感谢你的关注!
🍁🍁🍁🍁🍁🍁🍁🍁
Nginx为什么要设置超时时间?
延长超时时间
最近做的一个项目碰到了一个问题,先说一下业务背景:前端传入了一张照片,需要对这张照片进行识别,识别的时候会通过 HTTP 调用另外一个 AI 识别的服务
遇到的问题是什么呢?
在识别的时候,发现会爆出一个网络连接超时的错误
那么就赶紧去后端查看日志,发现错误是 SocketTimeOut,因为后端也是要发送 Http 请求来识别的,首先先排除一下错误的来源,这里具体的经过不详细说了,最后结果很离谱,竟然是这张图片的像素点太多了,导致识别时间太长!
在不修改 AI 识别模块的前提下,首先想到是后端的 OkHttpClient 超时时间设置的太短了,于是去设置的长一些,如下
之后发现不起作用,这是为什么呢?
其实是因为后端虽然超时时间设置的长了一些,但是前端和 Nginx 的超时时间还是很短呀,前端还没有等到后端的响应,就直接爆出
网络连接超时
了,那么很显然,解决方法就是设置这 3 个地方的超时时间:
- Nginx 超时时间
- 前端超时时间
- 后端 OkHttpClient 的超时时间
Nginx 超时时间设置:
Nginx 的超时时间就设置
proxy_read_timeout 180;
这个参数即可,默认是 60s,我们将他调大为 180s,这样就算图片大一些,在 3 分钟之内识别完毕还是可以的
参数设置的位置(这里将 ip 给遮住了):
server {
listen 80;
listen [::]:80;
server_name ...;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location /api/stone/ {
# 等待 3 分钟,可能某些图片太大,解析需要花费时间
proxy_read_timeout 180;
# 填写 docker0 网卡地址:通过 ip a 查看,不用再去公网绕一圈
proxy_pass http://...:8082/stone/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
前端超时时间的设置:
因为请求是前端通过
axios
发送出去的,那么 axios 等待响应也是有一个超时时间的,因此还必须将 axios 的超时时间也设置为 3 分钟,这样才可以去等待后端处理图片
业务解决
如果不通过超时时间来解决的话,那么可以从源头解决,也就是上传图片的时候,去判断图片的分辨率,不可以超过一个阈值
如果超过了阈值,可以
提示无法上传
,或者是在后端对图片做出一些处理,
降低图片的分辨率
Nginx 超时时间配置
最后来说一下 Nginx 常见的几类超时设置
客户端超时设置
针对客户端请求的各个部分都可以设置超时时间
client_header_timeout time
:读取客户端请求头的超时时间,默认 60sclient_body_timeout time
:读取客户端请求体的超时时间,默认 60ssend_timeout time
:发送响应到客户端的超时时间,默认 60s,如果超过该时间,客户端没有接受任何响应,则 nginx 关闭此连接keepalive_timeout
:设置 http 长连接超时时间(即空闲连接可保持打开状态的时长),默认 75s
DNS 解析超时设置
resolver_timeout
:设置DNS解析超时时间,默认为30s
这个不常用
代理超时设置
proxy_connect_timeout
:设置与后端服务器建立连接的超时时间,默认 60sproxy_read_timeout
:设置从后端服务器读取响应的超时时间,默认 60sproxy_send_timeout
:设置向后端服务器发送请求的超时时间,默认 60s
上边解决后端超时,就是用的
proxy_read_timeout
68747470733a2f2f62:6c6f672e6373646e2e6e65742f71715f34353236303631392f:61727469636c652f64657461696c732f313335353431333133