Nginx 入门指南
安装部署
针对CentOS7,安装部署如下步骤如下:
- Repo
创建/etc/yum.repos.d/nginx.repo,并写入如下内容
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
这里的$releasever使用如下命令查看:
[root@localhost ~]# rpm -qi centos-release
Name : centos-release
Version : 7
Release : 3.1611.el7.centos
Architecture: x86_64
Install Date: Thu 06 Apr 2017 06:19:50 AM EDT
Group : System Environment/Base
Size : 37000
License : GPLv2
Signature : RSA/SHA256, Tue 29 Nov 2016 01:57:12 PM EST, Key ID 24c6a8a7f4a80eb5
Source RPM : centos-release-7-3.1611.el7.centos.src.rpm
Build Date : Tue 29 Nov 2016 01:12:59 PM EST
Build Host : c1bm.rdu2.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
Summary : CentOS Linux release file
Description :
CentOS Linux release files
$basearch 是系统架构,使用如下命令:
[root@localhost ~]# arch
x86_64
- 安装
yum install -y nginx
- 确认
systemctl status nginx
[root@localhost conf.d]# systemctl status nginx
● nginx.service - nginx - high performance web server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
Active: active (running) since Sat 2017-07-15 03:24:29 EDT; 13min ago
Docs: http://nginx.org/en/docs/
Process: 26018 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
Process: 26016 ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
Main PID: 26020 (nginx)
CGroup: /system.slice/nginx.service
├─26020 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
└─26021 nginx: worker process
Jul 15 03:24:29 localhost.localdomain nginx[26016]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Jul 15 03:24:29 localhost.localdomain nginx[26016]: nginx: configuration file /etc/nginx/nginx.conf test is successful
基本架构
Master and Worker
[root@localhost conf.d]# ps -ef | grep nginx
root 26020 1 0 03:24 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 26021 26020 0 03:24 ? 00:00:00 nginx: worker process
Nginx 由master和worker组成,master主要负责加载配置及维护worker线程,而worker负责执行具体的用户请求。master接收请求之后,将请求分发给worker。worker线程的个数在/etc/nginx/nginx.conf配置,更改参数后重启Nginx即可。Nginx还提供了一种机制,即工作线程格式可根据可用CPU个数进行动态调整。
这里重点强调的是,在为CPU分配worker process的时候,其实是可以设定一个亲和性规则的,比如:
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
每个CPU分别绑定到0,1,2,3号CPU
worker_processes 2;
worker_cpu_affinity 0101 1010;
第一个worker process绑定到0,2号CPU,第二个worker process版定到1,3号CPU。
worker_processes auto;
worker_cpu_affinity auto;
Worker process动态绑定到CPU。
worker_cpu_affinity auto 01010101;
限制动态绑定的CPU为0,2,4,6号CPU。
与此同时,还可以设置worker process的调度优先级。
Syntax: worker_priority number;
Default:
worker_priority 0;
Context: main
可选值为-20至20,正数代表优先级高,负数代表低。默认为0。
具体更多参数,请参考Nginx 配置
性能调优
操作系统
net.core.somaxconn 该值是操作系统参数,但是决定了NGINX能够接收的连接,由于NGINX是处理高并发连接的,一旦内核日志中报错显示这个值偏低,调高这个参数(系统默认比较小)
net.core.netdev_max_backlog 该值也是操作系统参数,这是网卡的数据包缓冲区大小,如果带宽很大,系统报错这个数值偏小,尝试调整此值。
sys.fs.file_max 该值也是操作系统参数,这是代表进程所能操作的连接和文件数,对于高并发的请求,最好调整这个参数。
net.ipv4.ip_local_port_range 该值也是操作系统参数,代表ipv4的端口range,如果内核日志报错端口不够用,尝试调整这个参数,通常是1024至65000。
NGINX 配置
worker process个数
worker_connections 每个work process能同时处理的连接数。默认值是512,但是通常操作系统都能够支持比这个更大的数字。具体设置值需要根据实际设定,当然也可通过一些测试手段测试出来。
Keepalive connections 对于NGINX性能有较大影响,因为能够减少CPU或网络由于过载而不停地打开和关闭连接。
- keepalive_requests 一个客户端可以对一个keepalive连接发起的请求数。默认是100,通常可以设置更大一些,具体值可以通过load-generation工具测试。
- keepalive_timeout 一个闲置的keepalive连接保持连接的时间。
参考
NGINX 性能调优: NGINX performance tunning