Why nginx?
1、更快
一方面,正常情况下,单次请求会得到更快的响应;另一方面,在高峰期nginx会比其他代理响应更迅速。
2、高扩展性
Nginx的设计极具扩展性,它完全是由多个不同功能、不同层次、不同类型且耦合度极低的模块组成。低耦合的特点造就了nginx大量的第三方模块,且都是通过嵌入到二进制文件中执行的,都具备优秀的性能。
3、高可靠性
依赖于nginx核心代码的优秀设计、模块设计的简单性;每一个worker进程都相对独立,出错后可以马上另外拉起一个。
4、低内存消耗
一般情况下,10000个非活跃的HTTP keepalive连接连接仅在nginx消耗2.5M内存。
5、单机支持10w以上的高并发连接。
6、热部署
master管理进程和worker工作进程的分离设计,使nginx在不中断工作的情况下进行热升级、热加载、更换日志文件等。
7、最自由的BSD协议
使得人们可以免费试用nginx的代码,还可以二次开发。
基础库
yum install -y gcc
yum install -y gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
内核参数优化(通用说明)
- fs.file-max:系统内所有进程打开的文件描述符数量。可以查看系统当前值:
#查看当前设置 [root@localhost ~]# cat /proc/sys/fs/file-max 6553560 #查看当前打开的文件描述符数,依次是 当前系统打开文件描述符数量,0,file-max [root@localhost ~]# cat /proc/sys/fs/file-nr 9216 0 6553560
- net.ipv4.tcp_tw_reuse:当作为客户端调用connect时,能够复用TIME_WAIT状态的套接字。
- net.ipv4.tcp_keepalive_time:表示当keepalive启用时,TCP发送keepalive消息的频度。默认是2小时,调整短一些,可以更快地清理无效的连接。
- net.ipv4.tcp_fin_timeout:主动关闭连接时,本端保持在FIN-WAIT-2状态的最大时间。
- net.ipv4.tcp_max_tw_buckets:系统保留TIME_WAIT状态的最大套接字数量,如果超过这个值,套接字将立即被清除并打印告警记录。该参数被设定为抵御简单的dos攻击,一般不建议人为改小。
- net.ipv4.tcp_max_syn_backlog:SYN_RECV状态的最大值,对于内存降低的机器,设置最小值为128。其默认值会随着内存增加而增加。当机器/服务负载过高,无法及时处理连接时,可以适当调高此值。一个SYN请求大概占用304字节的内存。修改此值得同时也要适当调整 /proc/sys/net/core/somaxconn参数。
- net.core.somaxconn:表示一个处于LISTEN状态的套接字,其接受SYN的队列长度。
- net.ipv4.ip_local_port_range:定义了UDP和TCP连接使用的本地端口范围,最好设置为一个偶数,一个奇数。必须大于或等于 ip_unprivileged_port_start。
- net.ipv4.ip_unprivileged_port_start:是命名空间粒度的配置,定义了非特权端口的最小值。特权端口需要root或 CAP_NET_BIND_SERVICE 才能绑定。默认值为1024.
- net.ipv4.tcp_rmem:定义了TCP接收缓存(用于TCP接收滑动窗口)的最小值,默认值和最大值。单位为B。
- net.ipv4.tcp_wmem:定义了TCP发送缓存(用于TCP发送滑动窗口)的最小值,默认值和最大值。单位为B。
- net.core.netdev_max_backlog:接收网卡数据包的缓存队列长度。
- rmem_default:套接字接收缓存区默认大小。会被tcp_rmem 的default覆盖。
- rmem_max:套接字接收缓存区最大的大小。不会被tcp_rmem 的max覆盖。
- wmem_default:套接字发送缓存区默认大小。会被tcp_wmem 的default覆盖。
- wmem_max:套接字发送缓存区最大的大小。不会被tcp_wmem 的max覆盖。
安装(此处没有按照书中的源码安装,而是安装的openresty版本,环境为centos7.7,内核5.9.11)
openresty官网:http://openresty.org/en/linux-packages.html
# add the yum repo:
wget https://openresty.org/package/centos/openresty.repo
sudo mv openresty.repo /etc/yum.repos.d/
# update the yum index:
sudo yum check-update
#install openresty
sudo yum install openresty
命令行控制(默认安装位置 /usr/local/openresty/)
1、指定配置文件
/usr/local/openresty/nginx/sbin/nginx -c tmp.conf
2、临时指定全局配置项。
注意:指定临时全局配置启动后,执行其他命令时也要加上这些配置,否则会执行出错;且临时配置不能与配置文件中的配置冲突。
#指定pid文件
/usr/local/openresty/nginx/sbin/nginx -g 'pid /var/nginx.pid;'
/usr/local/openresty/nginx/sbin/nginx -g 'pid /var/nginx.pid;' -s stop
3、测试配置文件
/usr/local/openresty/nginx/sbin/nginx -t
4、进程操作相关
#强制停止
/usr/local/openresty/nginx/sbin/nginx -s stop
kill -s SIGTERM $(cat nginx.pid)
kill -s SIGINT $(cat nginx.pid)
#优雅退出
/usr/local/openresty/nginx/sbin/nginx -s quit
kill -s SIGQUIT $(cat nginx.pid)
#热加载配置文件
/usr/local/openresty/nginx/sbin/nginx -s reload
kill -s SIGHUP $(cat nginx.pid)
#日志文件回滚(将旧的日志文件回滚后,reopen使进程重新打开日志文件,完成回滚)
/usr/local/openresty/nginx/sbin/nginx -s reopen
kill -s SIGUSER1 $(cat nginx.pid)