Nginx 入门指南

来源:互联网 发布:二手手机是那个软件 编辑:程序博客网 时间:2024/06/05 08:46

Nginx 入门指南

安装部署

针对CentOS7,安装部署如下步骤如下:

  1. Repo

创建/etc/yum.repos.d/nginx.repo,并写入如下内容

[nginx]name=nginx repobaseurl=http://nginx.org/packages/centos/$releasever/$basearch/gpgcheck=0enabled=1

这里的$releasever使用如下命令查看:

[root@localhost ~]# rpm -qi centos-releaseName        : centos-releaseVersion     : 7Release     : 3.1611.el7.centosArchitecture: x86_64Install Date: Thu 06 Apr 2017 06:19:50 AM EDTGroup       : System Environment/BaseSize        : 37000License     : GPLv2Signature   : RSA/SHA256, Tue 29 Nov 2016 01:57:12 PM EST, Key ID 24c6a8a7f4a80eb5Source RPM  : centos-release-7-3.1611.el7.centos.src.rpmBuild Date  : Tue 29 Nov 2016 01:12:59 PM ESTBuild Host  : c1bm.rdu2.centos.orgRelocations : (not relocatable)Packager    : CentOS BuildSystem <http://bugs.centos.org>Vendor      : CentOSSummary     : CentOS Linux release fileDescription :CentOS Linux release files

$basearch 是系统架构,使用如下命令:

[root@localhost ~]# archx86_64
  1. 安装

yum install -y nginx

  1. 确认

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 processJul 15 03:24:29 localhost.localdomain nginx[26016]: nginx: the configuration file /etc/nginx/nginx.conf syntax is okJul 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 nginxroot     26020     1  0 03:24 ?        00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.confnginx    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