Nginx

在Ubuntu18中使用Nginx

准备Nginx所需的库

  1. GCC编译器

    Nginx不直接提供二进制可执行程序

  2. PCRE库

    sudo apt-get install libpcre3-dev

    安装完成后用 pcre-config --version查看是否安装成功

  3. zlib库

    zlib库主要用于对HTTP包的内容进行压缩,进而减少网络传输量

    sudo apt install zlib1g

    zlib是直接使用的库,zlib-devel是二次开发所需要的库

    sudo apt install zlib1g-dev

  4. OpenSSL开发库

    通过OpenSSL库,可以使用SSL协议传输HTTP,另外,使用MD5、SHA1等散列函数也需要该库

    在Ubuntu系统中,openssl-devel库需要分开来安装

    sudo apt-get install openssl

    sudo apt-get install libssl-dev

在centos 7 中使用Nginx

安装所需要的库

  1. gcc 和 g++

    yum installl -y gcc

    yum install -y gcc-c++

  2. pcre

    yum install -y pcre pcre-devel

  3. zlib

    yum install -y zlib zlib-devel

  4. openssl

    yum install -y openssl openssl-devel

让centos7实现联网

默认情况下是不联网,而我们通常需要赋予静态IP让虚拟机联网

centos 系统默认没有ifconfig命令,需要先下载yum install -y net-tools.x86_64或者使用ip addr命令,关注ens33

  1. 修改ens33的配置文件

    vim /etc/sysconfig/network-scripts/ifcfg-ens33

    BOOTPROTO由原来的dhcp改为static,表明使用静态IP地址,将ONBOOT由原来的no改为yes,启动网络连接,再给出IP地址、子网掩码、网关和DNS服务器。以上DNS服务器是免费的

  2. 重启网络服务

    systemctl restart network

  3. 输入ip addr命令可以看到网络配置完成,可以通过ping www.baidu.com进行测试,完成联网

编译Nginx源码

上一步中联网的目的是获取虚拟机的IP地址,通过xshell以及xftp连接进行Nginx源码的传输

准备好以下的目录

  1. Nginx源码的存放目录,存放Nginx源码文件,非官方的模块源代码文件
  2. 编译阶段产生的中间文件存放目录,默认情况下编译过程中自动生成objs目录,存放在源码目录下
  3. 部署目录,存放实际Nginx运行所需要的二进制文件、配置文件,默认情况下为 /usr/local/nginx
  4. 日志文件存放目录

默认情况下,linux内核参数考虑最通用的场景,不符合用于高并发访问的web服务器的定义,所以通过修改内核参数,使得Nginx拥有更高性能

修改/etc/sysctl.conf来更改内核参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
fs .file-max = 999999
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.ip_local_port_range = 1024 61000
net.ipv4.tcp_rmem = 4096 32768 262142
net.ipv4.tcp_wmem = 4096 32768 262142
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.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn.backlog=1024

然后执行sysctl -p命令,使上述修改生效

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
file-max: 这个参数表示进程 (比如一个 worker 进程) 可以同时打开的最大句柄数这个参数直接限制最大并发连接数,需根据实际情况配置。
tcp_tw_reuse: 这个参数设置为 1,表示允许将 TIME-WAIT 状态的 socket 重新用于新的 TCP 连接,这对于服务器来说很有意义,因为服务器上总会有大量 TIME-WAIT 状态的连接
tcp_keepalive_time: 这个参数表示当 keepalive 启用时,TCP 发送 keepalive 消息的频度。默认是 2 小时,若将其设置得小一些,可以更快地清理无效的连接。
tcp_fin_timeout:这个参数表示当服务器主动关闭连接时,socket 保持在 FIN-WAIT-2状态的最大时间。
tcp_max_tw_buckets: 这个参数表示操作系统允许 TIME WAIT 套接字数量的最大值如果超过这个数字,TIME WAIT 套接字将立刻被清除并打印警告信息。该参数默认为 180 000,过多的 TIME WAIT 套接字会使 Web 服务器变慢。
tcp_max_syn_backlog: 这个参数表示 TCP 三次握手建立阶段接收 SYN 请求队列的最大长度,默认为 1024,将其设置得大一些可以使出现 Nginx 繁忙来不及 accept 新连接的情况时,Linux 不至于丢失客户端发起的连接请求。
ip_local_port_range:这个参数定义了在 UDP 和TCP 连接中本地 (不括连接的远端)端口的取值范围。
net.ipv4.tcp_rmem : 这个参数定义了 TCP 接收缓存 (用于 TCP 接收滑动窗口)的最小值、默认值、最大值。
net.ipv4.tcp_wmem: 这个参数定义了 TCP 发送缓存 (用于 TCP 发送滑动窗口)的最小值、默认值、最大值。
netdev_max_backlog: 当网卡接收数据包的速度大于内核处理的速度时,会有一个队列保存这些数据包。这个参数表示该队列的最大值。
rmem_default: 这个参数表示内核套接字接收缓存区默认的大小。
wmem_default: 这个参数表示内核套接字发送缓存区默认的大小
rmem_max: 这个参数表示内核套接字接收缓存区的最大大小。
wmem_max: 这个参数表示内核套接字发送缓存区的最大大小。
tcp_syncookies:该参数与性能无关,用于解决 TCP 的 SYN 攻击

进入到Nginx源码目录,执行以下3行命令:

./configure——检测操作系统内核和已经安装的软件,参数的解析,中间目录的生成以及根据各种参数生成一些 C 源码文件、Makefile 文件等

make——根据 configure 命令生成的 Makefile 文件编译Nginx 工程,并生成目标文件最终的二进制文件

make install——根据configure 执行时的参数将Nginx 部署到指定的安装目录,包括相关目录的建立和二进制文件、配置文件的复制


Nginx
https://kevin346-sc.github.io/2023/04/11/Nginx/
作者
Kevin Huang
发布于
2023年4月11日
许可协议