使用Nginx的必备软件以及Linux内核参数的优化
Linux操作系统:需要内核为Linux2.6及以上版本的操作系统。使用uname -a命令来查询Linux内核版本。
操作系统上面至少安装了如下软件:
1、GCC编译器(可用来编译C语言程序)
yum install -y gcc
2、PCRE库(perl兼容正则表达式)。如果在配置文件nginx.conf里使用了正则表达式,那么在编译Nginx时就必须把PCRE库编译进Nginx,因为Nginx的HTTP模块要靠它来解析正则表达式。如果不会使用正则表达式,就不需要安装。
yum install -y pcre pcre-devel
3、zlib库(用于对HTTP包的内容做gzip格式的压缩)。如果在nginx.conf里配置了gzip on,并指定对于某些类型(content-type)的HTTP响应使用gzip来进行压缩以减少网络传输量,那么在编译时就必须把zlib编译进Nginx。
yum install -y zlib zlib-devel
4、OpenSSL开发库。如果服务器不只是要支持HTTP,还需要在更安全的SSL协议上传输HTTP,那么就需要拥有OpenSSL了,安装之后也可以使用MD5、SHA1等散列函数。
yum install -y openssl openssl-devel
Nginx是高度自由化的web服务器,它的功能是由许多模块来支持的。根据使用需求来选择是否安装。
需要在Linux中准备的磁盘目录
1、Nginx源代码存放目录:存放Nginx源码文件以及第三方或者我们自己写的模块源代码文件。
2、Nginx编译阶段产生的中间文件存放目录:存放configure命令执行后所产生的源代码文件及目录,以及make命令执行后生成的目标文件和最终连接成功的二进制文件。默认情况下,configure命令会将该目录命名为objs,并放在Nginx源代码目录下。
3、部署目录:存放实际Nginx服务允许期间所需要的二进制文件、配置文件等。默认情况下,该目录为/usr/local/nginx。
4、日志文件存放目录:日志文件通常会比较大,当研究Nginx的底层架构时,需要打开debug级别的日志,这个级别的日志非常详细,会导致日志文件的大小增长得几块,需要预先分配一个拥有更大磁盘空间的目录。
Linux内核参数的优化
因为Linux默认的内核参数考虑的时最通用的场景,但这不符合用于支持高并发访问的web服务器,所以需要根据业务特点(将Nginx作为静态web内容服务器、反向代理服务器或者是提供图片缩略图实时压缩图片的服务器)来修改Linux内核参数,使得Nginx可以拥有更高的性能。
需要修改/etc/sysctl.conf来更改内核参数
最常用的配置:
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_rmen = 4096 32768 262142
net.ipv4.tcp_wmen = 4096 32768 262142
net.ipv4.tcp_max_syn_backlog = 1024
net.core.rmen_default = 262144
net.core.wmen_default = 262144
net.core.rmen_max = 2097152
net.core.wmen_max = 2097152
net.ipv4.tcp_syncookies = 1
然后执行sysctl -p命令,使上述修改生效。
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套接字将立刻被清除并打印警告消息。该参数默认是180000,过多的TME-WAIT套接字会使web服务器变慢。
tcp_max_syn_backlog:这个参数表示TCP三次握手建立阶段接收SYN请求队列的最大长度,默认为1024,将其设置得大一些可以使出现nginx繁忙来不及accept新链接的情况时,Linux不至于丢失客户端发起的连接请求。
ip_local_port_range:这个参数定义了在UDP和TCP连接中本地(不包括连接的远端)端口就得取值范围。
tcp_rmen:这个参数定义了TCP接收缓存(用于TCP接收滑动窗口)的最小值、默认值、最大值。
tcp_wmen:这个参数定义了TCP发送缓存(用于TCP发送滑动窗口)的最小值、默认值、最大值。
rmen_default:这个参数表示内核套接字接收缓存区默认的大小。
wmen_default:这个参数表示内核套接字发送缓存区默认的大小。
rmen_max:这个参数表示内核套接字接收缓存区最大大小。
wmen_max:这个参数表示内核套接字发送缓存区最小大小。
tcp_syncookies:该参数与性能无关,用于解决TCP的SYN攻击。
获取Nginx源码
在官网上获取http://nginx.org/en/download.html。将下载的源码压缩包放置到准备好的Nginx源代码目录中,然后解压。
编译安装Nginx,进入解压目录后执行以下3行命令
./configure
make
make install
configure命令做的工作包括检测操作系统内核和已经安装的软件,参数的解析,中间目录的生成以及根据各种参数生成一些C源码文件、Makefile文件等。
make命令根据configure命令生成的Makefile文件编译成Nginx工程,并生成目标文件、最终的二进制文件。
make install命令根据configure执行时的参数将Nginx部署到指定的安装目录,包括相关目录的建立和二进制文件、配置文件的复制。
configure的命令参数(太多了,就不一一列举出来了)
1、路径相关参数
2、编译相关参数
3、依赖软件的相关参数
4、模块相关的参数
5、其他参数