CentOS 从源码编译并安装 Nginx

Linux 系统要求

Nginx 在 Linux 操作系统下运行的时候,要想获取高并发能力,要求 Linux 内核必须在 2.6 以上,可通过以下命令查看 Linux 内核版本。

$ uname -r
2.6.18-128.e15

安装 Nginx 的必备软件

通过以下命令安装使用 Nginx 必备的软件:

$ sudo yum update
$ sudo yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel

其中:

  1. gcc 和 gcc-c++ 为 c/c++ 编译器
  2. PCRE 即 Perl 兼容正则表达式,如果我们在 nginx.conf 中使用到了正则表达式,那么必须在编译时将 pcre 库编译进 Nginx。pcre-devel 是使用 PCRE 做二次开发时所需要的开发库,包括头文件,这也是编译时所必需的。
  3. zlib 库用于对 HTTP 包的内容做 gzip 格式的压缩。zlib-devel 是二次开发所需要的库。
  4. open-ssl 用来支持 SSL。

编译与安装

从 Nginx 官网  https://nginx.org/en/download.html 下载最新的 Nginx 源码,放在任意目录下,然后解压

$ tar -xf nginx-1.xx.0.tar.gz

进入解压后文件夹,执行以下命令

$ ./configure
$ make 
$ sudo make install

其中,./configure 用来生成 make 所必须的一些文件。Nginx 安装完成后的目录默认在 /usr/local/nginx 。

优化 Linux 内核参数

默认的 Linux 内核参数不符合用于支持高并发访问的 web 服务器的定义,因此需要优化内核参数,需要修改 /etc/sysctl.conf 文件,常用配置如下。

fs.file-max = 999999              # 进程可以同时打开的最大句柄数,直接限制最大并发连接数
net.ipv4.tcp_tw_reuse = 1         # 1表示允许将 TIME-WAIT 状态的 socket 重新用于新的 TCP 链接
net.ipv4.tcp_keepalive_time = 600 # 启用 keepalive 时,TCP 发送 keepalive 消息的频度
net.ipv4.tcp_fin_timeout 30       # 服务器主动关闭连接时,socket 保持在 FIN-WAIT-2 状态的时间 
net.ipv4.tcp_max_tw_buckets = 5000          # TIME-WAIT 套接字数量的最大值
net.ipv4.ip_local_port_range = 1024  61000  # UDP 和 TCP 连接中本地端口取值范围
net.ipv4.tcp_rmem = 4096 32768 262142       # TCP 接收缓存的最小值,默认值,最大值
net.ipv4.tcp_wmem = 4096 32768 262142       # TCP 发送缓存的最小值,默认值,最大值
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       # 内核套接字发送缓存区的最大大小
net.tcp_syncookies = 1            # 该参数与性能无关,用于解决 TCP 的 SYN 攻击 
net.tcp_max_syn.backlog = 1024    # TCP 三次握手接收 SYN 请求队列的最大长度

然后执行 sysctl -p 即可使上述命令生效。

参考书籍:《深入理解 Nginx:模块开发与架构解析》第二版。

猜你喜欢

转载自blog.csdn.net/m0_37315653/article/details/82655988