- 安装工具
yum -y install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
- 编译安装
./configure --user=ifan --group=ifan --prefix=/home/ifan/software/nginx --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-threads
make && make install
Nginx上的进程数和CPU核心数相等时,进程间切换的代价是最小的。
- 基本配置项
1.1 error日志
语法: error_log pathfile level;
默认: error_log logs/error.log error;
1.2 定义环境变量
语法: env VAR|VAR=VALUE
1.3 嵌入其他配置文件
语法: include pathfile;
include conf.d/*conf
1.4 设置一个worker进程可以打开的最大文件句柄数
语法: worker_rlimit_nofile limit;
- 优化性能的配置项
2.1 进程数
语法: worker_processes number;
默认: worker_processes 1;
2.2 进程绑定到指定的CPU
仅适用于Linux
语法: worker_cpu_affinity cpumask[cpumask...]
worker_cpu_affinity 1000 0100 0010 0001;
2.3 进程优先级
语法: worker_priority nice;
默认: worker_priority 0;
nice取值范围是-20~+19, -20是最高优先级, -19是最低优先级,但是不建议比内核进程的nice值(通常为-5)还小
- 事件配置项
3.1 每个worker的最大连接数
worker_connections number;
修改内核参数以获得更好的性能
/etc/sysctl.conf
#表示进程(例如一个worker进程)可能同时打开的最大句柄数,直接限制最大并发连接数
fs.file max = 999999
#1代表允许将状态为TIME-WAIT状态的socket连接重新用于新的连接。对于服务器来说有意义,因为有大量的TIME-WAIT状态的连接
net.ipv4.tcp_tw_reuse = 1
#当keepalive启用时,TCP发送keepalive消息的频率。默认是2个小时。将其调小一些,可以更快的清除无用的连接
net.ipv4.tcp_keepalive_time = 600
#当服务器主动关闭链接时,socket保持FN-WAIT-2状态的最大时间
net.ipv4.tcp_fin_timeout = 30
#允许TIME-WAIT套接字数量的最大值。超过些数字,TIME-WAIT套接字将立刻被清除同时打印警告信息。默认是180000,过多的TIME-WAIT套接字会使webserver变慢
net.ipv4.tcp_max_tw_buckets = 5000
#UDP和TCP连接中本地端口(不包括连接的远端)的取值范围
net.ipv4.ip_local_port_range = 1024 61000
#TCP接收/发送缓存的最小值、默认值、最大值
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
#解决TCP的SYN攻击。与性能无关
net.ipv4.tcp_syncookies = 1
#三次握手建立阶段SYN请求队列的最大长度,默认是1024。设置大一些可以在繁忙时将来不及处理的请求放入队列,而不至于丢失客户端的请求
net.ipv4.tcp_max_syn_backlog = 1024