准备工作:
1、LINUX操作系统
首先内核为Linux2.6 及以上版本的操作系统,因为Linux2.6 及以上版本才支持epoll,使用select或者poll来解决事件的多路复用,是无法解决高并发压力问题。
uname -a
2、安装nginx的必备软件
1)、GCC编译器
#GCC可用来编译C语言程序。Nginx不会直接提供二进制可执行程序
yum install -y gcc
#使用C++来编写Nginx HTTP模块,需要用到G++编译器
yum install -y gcc-c++
2)、PCRE库
该库支持正则表达式。如果我们ngnix.conf里面使用正则表达式编译安装时候必须把PCRE库编译进Nginx
yum install -y pcre pcre-devel
3)、zlib库
zlib库用于对HTTP包内容做gzip格式的压缩,如果我们ngnix.conf里面配置了 gzip on。并且对于某些类型(content-type)的HTTP响应使用gzip进行压缩减少网络传输量。
yum install -y zlib zlib-devel
4)、OpenSSL开发库
如果我们的服务器不只是要支持HTTP,还需要再更安全的SSL协议上传输HTTP,那就需要OpenSSL。传输为HTTPS
yum install -y openssl openssl-devel
3、Nginx内核参数优化
只是简单的对TCP网络参数做简单的说明:
-
fs.file-max = 999999
表示进程(比如一个worker进程)同时可以打开的最大句柄数,这个参数直接限制最大并发连接数。默认查看(/proc/sys/fs/file-max)
-
net.ipv4.tcp_tw_reuse = 1
参数设置为 1 ,表示允许将TIME_WAIT状态的socket重新用于新的TCP链接,这对于服务器来说意义重大,因为总有大量TIME_WAIT状态的链接连接状态,默认值2(/proc/sys/net/ipv4/tcp_tw_reuse)
-
net.ipv4.tcp_keepalive_time = 600
当keepalive启动时,TCP发送keepalive消息的频度,将其设置为10分钟,可以更快的清理无效的连接。默认是2小时(/proc/sys/net/ipv4/tcp_keepalive_time)
-
net.ipv4.tcp_fin_timeout = 30
这个参数表示当服务器主动关闭连接时,socket保持在FIN_WAIT_2状态的较大时间。默认值60(/proc/sys/net/ipv4/tcp_fin_timeout)
-
net.ipv4.tcp_max_tw_buckets = 5000
表示操作系统允许TIME_WAIT套接字数量的较大值,如超过此值,TIME_WAIT套接字将立刻被清除并打印警告信息,过多的TIME_WAIT套接字会使Web服务器变慢,默认值/proc/sys/net/ipv4/tcp_max_tw_buckets
-
net.ipv4.ip_local_port_range = 1024 65000
定义UDP和TCP链接的本地端口的取值范围,默认值/proc/sys/net/ipv4/ip_local_port_range
-
net.ipv4.tcp_rmem = 10240 87380 12582912
定义了TCP接受缓存的最小值、默认值、较大值 -
net.ipv4.tcp_wmem = 10240 87380 12582912
定义TCP发送缓存的最小值、默认值、较大值 -
net.core.netdev_max_backlog = 8096
当网卡接收数据包的速度大于内核处理速度时,会有一个列队保存这些数据包。这个参数表示该列队的较大值,默认值/proc/sys/net/core/netdev_max_backlog
-
net.ipv4.tcp_syncookies = 1
与性能无关。用于解决TCP的SYN攻击 -
net.ipv4.tcp_max_syn_backlog = 1024
这个参数表示TCP三次握手建立阶段接受SYN请求列队的较大长度,默认1024,将其设置的大一些可使出现Nginx繁忙来不及accept新连接时,Linux不至于丢失客户端发起的连接请求,默认值/proc/sys/net/ipv4/tcp_max_syn_backlog
-
net.ipv4.tcp_tw_recycle = 1
这个参数用于设置启用timewait快速回收
fs.filemax=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 65000
net.ipv4.tcp_rmem=10240 87380 12582912
net.ipv4.tcp_wmem=10240 87380 12582912
net.core.netdev_max_backlog=8096
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_max_syn_backlog=1024
net.ipv4.tcp_tw_recycle=1
4、获取Nginx源码
http://nginx.org/en/download.html在这里插入图片描述
下载
wget http://nginx.org/download/nginx-1.16.1.tar.gz
解压
tar -zxf nginx-1.16.1.tar.gz
5、编译安装
1)、进入解压目录
cd nginx-1.16.1
2)、简单安装(编译不加载模块)
./configure
make && make install
如下图编译安装nginx完成:
3)configure详解
./configure --help
PATH=默认目录路径
6、编译加载模块
1)、重新编译代码和模块
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module
2)、 重新make(千万不要make install覆盖)
make
make完之后在objs目录下就多了个nginx,这个就是新版本的程序了
3)、备份旧的nginx程序
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
4)、把新的nginx程序覆盖旧的
\cp objs/nginx /usr/local/nginx/sbin/nginx
5)、测试新的nginx程序是否正确
/usr/local/nginx/sbin/nginx -t
6)、平滑重启nginx
/usr/local/nginx/sbin/nginx -s reload
7)、查看ngixn版本极其编译参数
/usr/local/nginx/sbin/nginx -V