当前位置: 首页 > news >正文

nginx优化(持续更新!!!)

1.调整文件描述符

# 查看当前系统文件描述符限制
ulimit -n

# 永久修改文件描述符限制
# 编辑 /etc/security/limits.conf 文件,添加以下内容
* soft nofile 65535
* hard nofile 65535

# 编辑 /etc/sysctl.conf 文件,添加以下内容
fs.file-max = 65535

2.调整内核参数

vim /etc/sysctl.conf
net.core.somaxconn = 65535  # 最大连接队列长度
net.core.netdev_max_backlog = 65535  # 网络设备最大队列长度
net.ipv4.tcp_max_syn_backlog = 65535  # SYN 队列长度
net.ipv4.tcp_max_tw_buckets= 65535   #TIME_WAIT状态的连接的最大数量
net.ipv4.tcp_tw_reuse = 1  # 允许重用 TIME_WAIT 连接
net.ipv4.tcp_tw_recycle = 1  # 快速回收 TIME_WAIT 连接
net.ipv4.tcp_fin_timeout = 30  # FIN 超时时间
fs.file-max = 2097152  #系统支持的最大文件描述符数

3.nginx配置优化
1.worker_processes
worker_processes directive指定nginx worker进程的数量。

worker_processes 1;
#  lscpu命令来找出CPU的核数。

2.accept_mutex
accept_mutex参数的意义:当一个新连接到达时,如果激活了accept_mutex,那么多个Worker将以串行方式来处理,其中有一个Worker会被唤醒,其他的Worker继续保持休眠状态;如果没有激活accept_mutex,那么所有的Worker都会被唤醒,不过只有一个Worker能获取新连接,其它的Worker会重新进入休眠状态。

events {
 accept_mutex on;
 }

3.accept_mutex_delay
当accept_mutex功能启用后,只有一个持有mutex锁的worker进程会接受并处理请求,其他worker进程等待。accept_mutex_delay指定的时间就是这些worker进程的等待时间,过了等待时间下一个worker进程便取得mutex锁,处理请求。accept_mutex_delay在events模块中指定,默认的值为500ms。

events {
 accept_mutex_delay 500ms;
 }

4.worker_connections
worker_connections的默认值是512,它在events模块中。它指定了一个worker进程在同一时间可以处理的最大请求数。

events {
 worker_connections 512;
 }

5.worker_rlimit_nofile
worker_rlimit_nofile directive,可以用来设置系统可用的文件描述符。这与ulimit设置可用文件描述符的作用是一样的。如果它们都设置了可用文件描述符,那么worker_rlimit_nofile会覆盖ulimit的设置。

worker_rlimit_nofile 20960;

6.multi_accept
multi_accept可以让nginx worker进程尽可能多地接受请求。它的作用是让worker进程一次性地接受监听队列里的所有请求,然后处理。如果multi_accept的值设为off,那么worker进程必须一个一个地接受监听队列里的请求。

events {
 multi_accept on;
 }

7.use
指定事件模型,epoll适用于Linux,能提高性能.

events {
 use epoll;
 }

8.sendfile
当一个程序需要传输文件时,Linux内核首先将文件数据缓冲,然后将文件数据传送给程序缓冲,最后程序将文件数据传输到目的地。Sendfile方法是一种数据传输的更高效的方法,数据在内核中的文件描述符之间传输,而不需要将数据传输给程序缓冲。这种方法的结果是改善了对操作系统资源的利用。
我们可以用sendfile directive来启用sendfile方法,在http,server,location三个模块都可以定义。

http {
 sendfile on ;
 }

9.TCP_NODELAY
禁用Nagle算法,减少延迟

 http {
 tcp_nodelay on;
 }

10.TCP_CORK
减少网络包的数量,提高传输效率

http {
 tcp_nopush on;
 }

11.keepalive_timeout
长连接超时时间,单位秒

http {
    # 连接和请求超时设置
    keepalive_timeout  65; # 长连接超时时间,单位秒
    client_body_timeout 60; # 读取客户端请求主体的超时时间
    client_header_timeout 60; # 读取客户端请求头的超时时间
    send_timeout 60; # 向客户端发送响应的超时时间
}

12.client_body_timeout 60
读取客户端请求主体的超时时间

http {
    # 连接和请求超时设置
    keepalive_timeout  65; # 长连接超时时间,单位秒
    client_body_timeout 60; # 读取客户端请求主体的超时时间
    client_header_timeout 60; # 读取客户端请求头的超时时间
    send_timeout 60; # 向客户端发送响应的超时时间
}

13.client_header_timeout 60
读取客户端请求头的超时时间

http {
    # 连接和请求超时设置
    keepalive_timeout  65; # 长连接超时时间,单位秒
    client_body_timeout 60; # 读取客户端请求主体的超时时间
    client_header_timeout 60; # 读取客户端请求头的超时时间
    send_timeout 60; # 向客户端发送响应的超时时间
}

14.send_timeout 60
向客户端发送响应的超时时间

http {
    # 连接和请求超时设置
    keepalive_timeout  65; # 长连接超时时间,单位秒
    client_body_timeout 60; # 读取客户端请求主体的超时时间
    client_header_timeout 60; # 读取客户端请求头的超时时间
    send_timeout 60; # 向客户端发送响应的超时时间
}

15.client_max_body_size
允许客户端请求的最大大小,超过此大小会返回413错误

http{
 client_max_body_size 10m;
}

16.Gzip压缩配置
gzip压缩功能主要用于在服务器端对响应内容进行压缩,然后将压缩后的数据发送给客户端(如浏览器),客户端收到后会自动解压缩并使用。

http{
    # Gzip压缩配置
    gzip  on; # 开启Gzip压缩
    gzip_vary on; # 根据客户端是否接受Gzip来决定是否压缩
    gzip_comp_level 6; # 压缩级别,1-9,6是速度和压缩率的平衡点
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; # 需要压缩的MIME类型
}

17.worker_cpu_affinity
将每个 worker 子进程与我们的 cpu 物理核心绑定。

worker_cpu_affinity 0001 0010 0100 1000; # 4个物理核心,4个worker子进程

18.worker_priority
指定 worker 子进程的 nice 值,以调整运行 Nginx 的优先级,通常设定为负值,以优先调用 Nginx 。

worker_priority -10; # 120-10=110,110就是最终的优先级

Linux 默认进程的优先级值是120,值越小越优先;nice 定范围为 -20 到 +19 。
[备注] 应用的默认优先级值是120加上 nice 值等于它最终的值,这个值越小,优先级越高。
19.worker_shutdown_timeout
指定 worker 子进程优雅退出时的超时时间。

worker_shutdown_timeout 5s;
timer_resolution

worker 子进程内部使用的计时器精度,调整时间间隔越大,系统调用越少,有利于性能提升;反之,系统调用越多,性能下降。

相关文章:

  • cv图像分割
  • Python正则表达式(二)
  • 从零开始跑通3DGS教程:介绍
  • Java + LangChain 实战入门,开发大语言模型应用!
  • 【实战】解决图片 Hover 抖动问题的完整指南
  • Qt:QWebEngineView显示网页失败
  • css100个问题
  • 2024年第五届MathorCup数学应用挑战赛大数据竞赛复赛论文
  • Servlet案例下载文件,图片验证码
  • uni-app AES 加密
  • 密码学——知识问答
  • 【今日半导体行业分析】2025年3月27日
  • Python 练习项目:MBTI 命令行测试工具
  • 6.2、认证主要产品与应用
  • visual studio 指令安装Nuget包
  • 前后端常见模型以及相关环境配置介绍
  • 五、小白学JAVA-数组
  • java同时使用两个不同版本的jar包,基于maven-shade-plugin,非自定义类加载器方法
  • LeetCode讲解篇之456. 132 模式
  • 【Excalidraw画图】低成本搭建团队手绘白板工具:Excalidraw本地部署与远程流畅使用
  • 网站建设 6万/云搜索app
  • 做筹款的网站需要什么资质/天津百度关键词推广公司
  • 企业管理顾问东莞网站建设/凡科建站怎么导出网页
  • logo一键生成器免费版下载/广东seo排名
  • 自己做蛋糕有什么网站吗/网络营销产品的首选产品
  • 网站费用怎么做分录/济南百度公司