Linux教程网

nginx 准备工作

依赖环境

1)操作系统

内核为 Linux 2.6 以上,支持 epoll 特性

2)依赖软件

  • gcc:编译器
  • pcre:解析正则表达式
  • zlib:压缩解压
  • openssl:支持 TLS/SSL 加密解密

内核参数

默认的 Linux 内核参数考虑的是最通用的场景,这明显不符合用于支持高并发访问 web 服务器的定义。

所以修改 Linux 内核参数,可以使得 nginx 拥有更高的性能。在优化内核时,可以做的事很多,我们通常会根据业务特点来进行调整。

通过 /etc/sysctl.conf 更改内核参数,最常用的配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 进程可以同时打开的最大句柄数,直接限制了最大并发连接数
fs.file.max = 999999

# 允许将TIME-WAIT状态的socket重新用于新的TCP连接
net.ipv4.tcp_tw_reuse = 1
# 当keepalive启用时,TCP发送keepalive消息的频度
# 默认2小时,设置小一些可以更快清理无效的连接
net.ipv4.tcp_keepalive_time = 60
# 当服务器主动关闭连接时,socket保持在FIN-WAIT-2状态的最大时间
net.ipv4.tcp_fin_timeout = 30
# 允许TIME_WAIT数量的最大值,过多的TIME_WAIT套接字会使Web服务器变慢
net.ipv4.tcp_max_tw_buckets = 5000
# 定义了TCP接收缓存的最小、默认、最大值
net.ipv4.tcp_rmem = 4096 32768 262142
# 定义了TCP发送缓存的最小、默认、最大值
net.ipv4.tcp_wmem = 4096 32768 262142

# 与性能无关,用于解决TCP的SYN攻击
net.ipv4.tcp_syncookies = 1
# 三次握手SYN请求队列的最大长度,默认1024,可以设置大一些
net.ipv4.tcp_max_syn.backlog = 1024

# 定义了UDP和TCP连接中本地端口的范围
net.ipv4.ip_local_port_range = 1024 61000

# 当网卡接收数据包的速度大于内核处理的速度时会有一个队列保存这些数据包
net.core.netdev_max_backlog = 8096
# 内核套接字接收缓存区默认的大小
net.core.rmem_default = 262144
# 内核套接字发送缓存区默认的大小
net.core.wmem_default = 262144
# 内核套接字接收缓存区的最大大小
net.core.rmem_max = 2097152
# 内核套接字发送缓存区的最大大小
net.core.wmem_max = 2097152

滑动窗口的大小与套接字缓存区在一定程度上影响并发连接的数目;每个 tcp 连接都会为维护 tcp 滑动窗口而消耗内存,这个窗口会根据服务器的处理速度收缩或扩张;

参数 wmem_max 的设置,需要平衡物理内存的总大小、nginx 并发处理的最大连接数量(worker_processes 和 worker_connections 参数共同决定)而确定;

关于代码

代码下载

nginx 代码可以从官方 页面 下载。如果希望下载其它旧的版本,可以直接通过 下载目录 来找对应版本的代码包。

除了官方网站下载地址外,在 github 上也可以下载对应的代码,只不过 github 上是只读仓库,也就是说你不能通过 PR 方式在 github 上贡献代码。

代码版本

nginx 版本分为主线版本、稳定版本、老旧版本。

  • 主线版本(Mainline version):为最新版本,包含最新的特性;
  • 稳定版本(Stable version):经历过生产环境实际验证的,稳定性相对是有保证的;
  • 老旧版本(Legacy versions):一般不建议使用,建议使用稳定版本;

当前(2024.04.06)最新版本为 1.25.4,最新稳定版本为 1.24.0

不同分支

由于 nginx 的丰富特性、高性能、稳定性、易扩展等优点,应用非常广泛,且出现了几个重要的分支

  • nginx 官方
  • openresty(章亦春)
  • tengine(淘宝)
  • 其它 …

我们当前只需要关心 nginx 官方即可

代码贡献

由于历史原因,当前 nginx 官方的开发流程并非基于 github,也就是说你无法通过 PR 方式来参与 nginx 开源代码的贡献,当前仍然使用邮件列表的方式,具体方式参考官方说明

参考资料


专题:

本文发表于 2023-01-05,最后修改于 2024-06-23。

本站永久域名「 golinuxblog.com 」,也可搜索「 Linux教程网 」找到我。


上一篇 « nginx 初步了解 下一篇 » nginx 编译运行

推荐阅读

Big Image