Ceph入门到精通-Nginx 大量请求 延迟优化

优化nginx以处理大量请求并减少延迟可以通过以下几种方法实现:

  1. 调整worker_processes和worker_connections参数:增加worker_processes值可以增加nginx的进程数量,提高并发处理能力。增加worker_connections参数的值可以增加每个worker进程可处理的连接数,从而在请求高峰期更好地分配负载。
  2. 使用gzip压缩:通过gzip压缩技术减少传输数据量,降低网络延迟。在nginx配置文件中启用gzip压缩,并调整gzip_comp_level和gzip_types参数以实现最佳压缩效果。
  3. 启用keepalive连接:通过保持HTTP连接来减少建立连接的开销。在nginx配置文件中启用keepalive,并适当调整keepalive_timeout参数以优化连接保持时间。
  4. 优化SSL配置:如果使用SSL加密,优化SSL配置可以减少延迟。在nginx配置文件中进行SSL优化,包括启用HTTP/2、使用TLSv1.2或更高版本、启用OCSP stapling等。
  5. 使用缓存:利用nginx的缓存功能,将静态内容存储在内存中,以减少对后端服务器的请求次数,从而降低延迟。在nginx配置文件中启用缓存,并适当调整缓存设置。
  6. 调整请求处理时间:通过减小请求的处理时间来减少延迟。优化应用程序代码、减少不必要的数据库查询或优化数据处理逻辑等都可以缩短请求处理时间。
  7. 使用负载均衡:如果应用程序需要处理大量并发请求,可以考虑使用负载均衡器来分担负载。通过配置nginx作为反向代理服务器,将请求分发到多个后端服务器上进行处理,提高整体的处理能力。
  8. 优化网络架构:根据实际情况,可以考虑使用CDN(内容分发网络)来减轻服务器压力,或者使用分布式架构来提高整体的处理能力。

请注意,以上方法只是一些常见的优化建议,具体的优化方案需要根据实际情况进行调整和测试。另外,在进行任何配置更改之前,建议先备份原始配置文件以防意外情况发生。

Nginx的超时timeout配置详解

本文介绍 Nginx 的 超时(timeout)配置。分享给大家,具体如下:

Nginx 处理的每个请求均有相应的超时设置。如果做好这些超时时间的限定,判定超时后资源被释放,用来处理其他的请求,以此提升 Nginx 的性能。

keepalive_timeout

HTTP 是一种无状态协议,客户端向服务器发送一个 TCP 请求,服务端响应完毕后断开连接。

如果客户端向服务器发送多个请求,每个请求都要建立各自独立的连接以传输数据。

HTTP 有一个 KeepAlive 模式,它告诉 webserver 在处理完一个请求后保持这个 TCP 连接的打开状态。若接收到来自客户端的其它请求,服务端会利用这个未被关闭的连接,而不需要再建立一个连接。

KeepAlive 在一段时间内保持打开状态,它们会在这段时间内占用资源。占用过多就会影响性能。

Nginx 使用 keepalive_timeout 来指定 KeepAlive 的超时时间(timeout)。指定每个 TCP 连接最多可以保持多长时间。Nginx 的默认值是 75 秒,有些浏览器最多只保持 60 秒,所以可以设定为 60 秒。若将它设置为 0,就禁止了 keepalive 连接。

# 配置段: http, server, location
keepalive_timeout 60s;

client_body_timeout

指定客户端与服务端建立连接后发送 request body 的超时时间。如果客户端在指定时间内没有发送任何内容,Nginx 返回 HTTP 408(Request Timed Out)。

# 配置段: http, server, location
client_body_timeout 20s;

client_header_timeout

客户端向服务端发送一个完整的 request header 的超时时间。如果客户端在指定时间内没有发送一个完整的 request header,Nginx 返回 HTTP 408(Request Timed Out)。

# 配置段: http, server, location
client_header_timeout 10s

send_timeout

服务端向客户端传输数据的超时时间。

# 配置段: http, server, location
send_timeout 30s;

客户度连接nginx超时, 建议5s内

接收客户端header超时, 默认60s, 如果60s内没有收到完整的http包头, 返回408

Syntax: client_header_timeout time;
Default: 
client_header_timeout 60s;
Context: http, server
Defines a timeout for reading client request header. If a client does not transmit the entire header within this time, the 408 (Request Time-out) error is returned to the client.

接收客户端body超时, 默认60s, 如果连续的60s内没有收到客户端的1个字节, 返回408

Syntax: client_body_timeout time;
Default: client_body_timeout 60s;
Context: http, server, location
Defines a timeout for reading client request body. The timeout is set only for a period between two successive read operations, not for the transmission of the whole request body. If a client does not transmit anything within this time, the 408 (Request Time-out) error is returned to the client.

keepalive时间,默认75s,通常keepalive_timeout应该比client_body_timeout大

Syntax: keepalive_timeout timeout [header_timeout];
Default: keepalive_timeout 75s;
Context: http, server, location
The first parameter sets a timeout during which a keep-alive client connection will stay open on the server side. The zero value disables keep-alive client connections. The optional second parameter sets a value in the "Keep-Alive: timeout=time" response header field. Two parameters may differ.

The "Keep-Alive: timeout=time" header field is recognized by Mozilla and Konqueror. MSIE closes keep-alive connections by itself in about 60 seconds.

可以理解为TCP连接关闭时的SO_LINGER延时设置,默认5s

Syntax: lingering_timeout time;
Default: lingering_timeout 5s;
Context: http, server, location
When lingering_close is in effect, this directive specifies the maximum waiting time for more client data to arrive. If data are not received during this time, the connection is closed. Otherwise, the data are read and ignored, and nginx starts waiting for more data again. The "wait-read-ignore" cycle is repeated, but no longer than specified by the lingering_time directive.

域名解析超时,默认30s

Syntax: resolver_timeout time;
Default: resolver_timeout 30s;
Context: http, server, location
Sets a timeout for name resolution, for example:resolver_timeout 5s;

发送数据至客户端超时, 默认60s, 如果连续的60s内客户端没有收到1个字节, 连接关闭

Syntax: send_timeout time;
Default: send_timeout 60s;
Context: http, server, location
Sets a timeout for transmitting a response to the client. The timeout is set only between two successive write operations, not for the transmission of the whole response. If the client does not receive anything within this time, the connection is closed.

nginx与upstream server的连接超时时间

Syntax: proxy_connect_timeout time;
Default: proxy_connect_timeout 60s;
Context: http, server, location
Defines a timeout for establishing a connection with a proxied server. It should be noted that this timeout cannot usually exceed 75 seconds.

nginx接收upstream server数据超时, 默认60s, 如果连续的60s内没有收到1个字节, 连接关闭

Syntax: proxy_read_timeout time;
Default: proxy_read_timeout 60s;
Context: http, server, location
Defines a timeout for reading a response from the proxied server. The timeout is set only between two successive read operations, not for the transmission of the whole response. If the proxied server does not transmit anything within this time, the connection is closed.

nginx发送数据至upstream server超时, 默认60s, 如果连续的60s内没有发送1个字节, 连接关闭

Syntax: proxy_send_timeout time;
Default: proxy_send_timeout 60s;
Context: http, server, location
Sets a timeout for transmitting a request to the proxied server. The timeout is set only between two successive write operations, not for the transmission of the whole request. If the proxied server does not receive anything within this time, the connection is closed.
相关推荐
腾科张老师1 小时前
什么是Ceph?它的技术特点是什么?部署挑战及解决方案如何?
ceph·计算机·存储
白了个白i4 小时前
多个方向说下nginx和apache的区别
运维·nginx·apache
m0_748240914 小时前
Linux系统下安装配置 Nginx 超详细图文教程
linux·运维·nginx
Amd79412 小时前
PostgreSQL 数据库的启动与停止管理
postgresql·性能优化·数据库管理·故障处理·日常维护·启动数据库·停止数据库
浅陌sss18 小时前
Unity性能优化 --- 减少OverDraw
unity·性能优化·游戏引擎
活跃的煤矿打工人20 小时前
【星海随笔】删除ceph
linux·服务器·ceph
HL_LOVE_C1 天前
Linux编程中的性能优化方法和工具
性能优化
GISer_Jing1 天前
Vue3知识弥补漏洞——性能优化篇
javascript·vue.js·性能优化·vue
java1234_小锋1 天前
ElasticSearch如何做性能优化?
大数据·elasticsearch·性能优化