Nginx 入门指南

Nginx 入门指南

安装部署

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

  1. 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
  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 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

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页