Nginx 实战系列之二:Nginx 优化中在 Nginx 侧 和 Linux 系统侧必须要调整优化的参数详细和最佳推荐配置

简介: Nginx 实战系列之二:Nginx 优化中在 Nginx 侧 和 Linux 系统侧必须要调整优化的参数详细和最佳推荐配置

Nginx 实战系列之二:Nginx 优化中在 Nginx 侧 和 Linux 系统侧必须要调整优化的参数详细和最佳推荐配置

Nginx 必须要调整优化的参数

Nginx Server 侧必须要调整的参数

Nginx 必须要调整的参数以及线上推荐的最优配置:

backlog=8192;
worker_processes     auto;  
worker_rlimit_nofile 10240; 
worker_connections 10240;
tcp_nopush  on;
tcp_nodelay on;
keepalive_timeout  300s;     
keepalive_requests 1000000;

建议其他调整的参数:

proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;

Linux 系统侧必须要调整的参数

网卡软中断绑定

Nginx 的机器,一般都是独立的机器,因此不建议采用默认 irqbalance 的自动绑定,而是要设置 smp_affinity、smp_affinity_list 的值来自动绑定。

非常关键的一点,就是不能重复绑定,网卡队列和 CPU 一定要一对一绑定,一般来说就是一个队列要绑定一个 CPU。对于万兆网卡,如果队列数超过了 CPU 核数,那么我们可以把网卡队列数调整为 CPU 核数,然后一对一绑定;一定要注意,通过 一个网卡队列需要并只能绑定到一个 CPU 上,不能绑定到多个 CPU 上,否则不会生效。

Linux nf_conntrack 参数

Linux nf_conntrack 是 Linux 网络相关的核心参数,sysctl 可以查看 conntrack 相关的所有数据:

sysctl -a | grep conntrack
  • • 对应 Nginx 的机器 conntrack 一般需要设置 nf_conntrack_max 为 100-200w,而 nf_conntrack_buckets 为 1/4 或者 1/2 倍 nf_conntrack_max,防止桶太大导致性能影响。
  • • 一般设置 nf_conntrack_tcp_timeout_time_wait 为 120,避免值过大从而维护的连接数太多而超过限制,超过连接数的上限后会丢包
  • • 一般设置 hashsize 不能太大,避免在连接数过多时出现较多的 hash 冲突,一般设置为 2-5w 左右,echo 20000 > /sys/module/nf_conntrack/parameters/hashsize

backlog 队列

  • • net.core.somaxconn
  • • 每一个端口最大的 Listen 监听队列的长度。如果这个设置太小从而导致了 Nginx 性能问题的话,我们可以查看内核日志发现这个状态。这个最终需要配合 Nginx listen 指令一起调整
  • • tcp_max_syn_backlog
  • • SYN(待完成连接)队列长度
  • • net.core.netdev_max_backlog
  • • 数据包在发送给 CPU 之前被网卡缓冲的速率;增加该值可以提高具有高带宽的机器的性能

Nginx 机器的推荐设置如下:

echo 32768 > /proc/sys/net/core/somaxconn
echo 819200 > /proc/sys/net/ipv4/tcp_max_syn_backlog

fs 文件描述符

  • • sys.fs.file-max
  • • Linux 系统允许的最大文件描述数,值的大小主要和机器内存有关,一般 32G 内存以上的机器,一般推荐设置为 100w-300w。
  • • nofile
  • • 应用层面允许的最大文件描述符数,一般设置 /etc/security/limits.conf文件

port 端口

  • • net.ipv4.ip_local_port_range
  • • port 端口的范围[net.ipv4.ip_local_port_range=1024 65535]
  • • 对压测端而言,如果是短链接
  • • 表示开启 TCP 连接中 TIME-WAIT sockets 的快速回收,默认为0,表示关闭。压测 client 端需要开启。
  • 对应 Nginx server 端,这个 tcp_tw_recycle 则要设置为 0
  • • 表示开启端口复用。允许将TIME-WAIT sockets重新用于新的 TCP接,默认为0,表示关闭;
  • • net.ipv4.tcp_tw_reuse = 1
  • • net.ipv4.tcp_tw_recycle = 1


相关文章
|
7月前
|
Ubuntu Linux Anolis
Linux系统禁用swap
本文介绍了在新版本Linux系统(如Ubuntu 20.04+、CentOS Stream、openEuler等)中禁用swap的两种方法。传统通过注释/etc/fstab中swap行的方式已失效,现需使用systemd管理swap.target服务或在/etc/fstab中添加noauto参数实现禁用。方法1通过屏蔽swap.target适用于新版系统,方法2通过修改fstab挂载选项更通用,兼容所有系统。
683 3
Linux系统禁用swap
|
7月前
|
Linux
Linux系统修改网卡名为eth0、eth1
在Linux系统中,可通过修改GRUB配置和创建Udev规则或使用systemd链接文件,将网卡名改为`eth0`、`eth1`等传统命名方式,适用于多种发行版并支持多网卡配置。
1233 3
|
7月前
|
编解码 应用服务中间件 Linux
centos配置nginx-rtmp实现ffmpeg转码rtsp为rtmp视频流
centos配置nginx-rtmp实现ffmpeg转码rtsp为rtmp视频流
642 1
|
6月前
|
存储 Linux 开发工具
Linux环境下使用Buildroot配置软件包
使用Buildroot可以大大简化嵌入式Linux系统的开发和维护工作,但它需要对Linux系统和交叉编译有深入的理解。通过上述步骤,可以有效地配置和定制软件包,为特定的嵌入式应用构建高效、稳定的系统。
786 11
|
7月前
|
Ubuntu 安全 应用服务中间件
详细指南:配置Nginx服务器在Ubuntu平台上
以上步骤涵盖了基本流程:从软件包管理器获取 Ngnix, 设置系统服务, 调整UFW规则, 创建并激活服务器块(也称作虚拟主机), 并进行了初步优化与加固措施。这些操作都是建立在命令行界面上,并假设用户具有必要权限(通常是root用户)来执行这些命令。每个操作都有其特定原因:例如,设置开机启动确保了即使重启后也能自动运行 Ngnix;而编辑server block则定义了如何处理进入特定域名请求等等。
428 18
|
Ubuntu Linux 网络安全
Linux系统初始化脚本
一款支持Rocky、CentOS、Ubuntu、Debian、openEuler等主流Linux发行版的系统初始化Shell脚本,涵盖网络配置、主机名设置、镜像源更换、安全加固等多项功能,适配单/双网卡环境,支持UEFI引导,提供多版本下载与持续更新。
767 3
Linux系统初始化脚本
|
7月前
|
Ubuntu 安全 应用服务中间件
详细指南:配置Nginx服务器在Ubuntu平台上
以上步骤涵盖了基本流程:从软件包管理器获取 Ngnix, 设置系统服务, 调整UFW规则, 创建并激活服务器块(也称作虚拟主机), 并进行了初步优化与加固措施。这些操作都是建立在命令行界面上,并假设用户具有必要权限(通常是root用户)来执行这些命令。每个操作都有其特定原因:例如,设置开机启动确保了即使重启后也能自动运行 Ngnix;而编辑server block则定义了如何处理进入特定域名请求等等。
704 17
|
7月前
|
安全 Linux Shell
Linux系统提权方式全面总结:从基础到高级攻防技术
本文全面总结Linux系统提权技术,涵盖权限体系、配置错误、漏洞利用、密码攻击等方法,帮助安全研究人员掌握攻防技术,提升系统防护能力。
921 1
|
7月前
|
监控 安全 Linux
Linux系统提权之计划任务(Cron Jobs)提权
在Linux系统中,计划任务(Cron Jobs)常用于定时执行脚本或命令。若配置不当,攻击者可利用其提权至root权限。常见漏洞包括可写的Cron脚本、目录、通配符注入及PATH变量劫持。攻击者通过修改脚本、创建恶意任务或注入命令实现提权。系统管理员应遵循最小权限原则、使用绝对路径、避免通配符、设置安全PATH并定期审计,以防范此类攻击。
1285 1
|
应用服务中间件 nginx
Nginx进程配置指令详解
Nginx进程配置指令主要包括:`worker_processes`设置工作进程数;`worker_cpu_affinity`绑定CPU核心;`worker_rlimit_nofile`设置最大文件描述符数量;`worker_priority`设置进程优先级;`worker_connections`设置最大连接数;`daemon`控制守护进程模式;`master_process`启用主进程模式;`pid`设置PID文件路径;`user`指定用户和组;`error_log`配置错误日志。这些指令在`nginx.conf`中配置,用于优化和控制Nginx的运行行为。
562 10