Nginx 全局设置 性能优化 小节2

212 阅读3分钟

@[TOC](Nginx 全局设置 性能优化 小节2)

nginx配置

  1. 配置文件的组成部分:
  • 主配置文件:nginx.conf
    子配置文件 include conf.d/*.conf
  • fastcgi,uwsgi,scgi等协议相关的配置文件
  • mime.types:支持的mime类型
  1. 主配置文件的配置指令:
  • directive value [value2 ...];
  1. 注意:
(1) 指令必须以分号结尾
(2) 支持使用配置变量
内建变量:由Nginx模块引入,可直接引用
自定义变量:由用户使用set命令定义
          set variable_name value;
引用变量:$variable_name

nginx配置文件

主配置文件结构:四部

main block:主配置段,即全局配置段,对http,mail都有效
event {
          ...
          }    事件驱动相关的配置
http {
          ...
        }     http/https 协议相关配置段>
mail {
          ...
          }     mail 协议相关配置段         
stream {
          ...
          }     stream 服务器相关配置段

http协议相关的配置结构

http {
   ...
   ... 各server的公共配置
   server { 每个server用于定义一个虚拟主机
         ...
        }
   server {
         ...
         server_name 虚拟主机名
         root 主目录
         alias 路径别名
         location [OPERATOR] URL { 指定URL的特性
                ...
                if CONDITION {
                      ...
                }
          }
    }
}

nginx配置

  • Main 全局配置段常见的配置指令分类
  • 正常运行必备的配置
  • 优化性能相关的配置
  • 用于调试及定位问题相关的配置
  • 事件驱动相关的配置
  • 帮助文档

nginx.org/en/docs/

tengine.taobao.org/nginx_docs/…

  • 正常运行必备的配置:

user

指定worker进程的运行身份,如组不指定,默认和用户名同名
Syntax:    user user [group];
Default:   user nobody nobody;
Context:   main

pid /PATH/TO/PID_FILE;

指定存储nginx主进程PID的文件路径

include file | mask;

指明包含进来的其它配置文件片断

load_module file;

模块加载配置文件: /usr/share/nginx/modules/*.conf

指明要装载的动态模块路径: /usr/lib64/nginx/modules

名称环境IP/GW安装方式
nginx10Centos737.10/GW37.2编译
nginxCentos737.7/GW37.2YUM

nginx10

[root@nginx10 conf]# pwd
/apps/nginx/conf

#过滤掉'nginx.conf'主配置文件中('#'和'空格')行
[root@nginx10 conf]# grep -v "#" nginx.conf |grep -v "^$"  或  grep -Ev "#|^$" nginx.conf 
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
图片.png 图片.png 图片.png
[root@nginx10 conf]# pwd
/apps/nginx/conf
[root@nginx10 conf]# cd ..
#创建文件夹、以后配置文件都写到此目录下(子配置目录)
[root@nginx10 nginx]# mkdir conf/test/

nginx

pid

[root@nginx ~]# vim /etc/nginx/nginx.conf 
默认全局变量中
...
pid        /var/run/nginx.pid;   <--指定存储nginx主进程PID的文件路径
...

[root@nginx ~]# ss -ntlp |grep 80
LISTEN     0      128          *:80                       *:*                   users:(("nginx",pid=11248,fd=6),("nginx",pid=11247,fd=6),("nginx",pid=11246,fd=6),("nginx",pid=11245,fd=6),("nginx",pid=11244,fd=6))

#pid为'11245'
[root@nginx ~]# pstree -p|grep nginx
           |-nginx(11244)-+-nginx(11245)
           |              |-nginx(11246)
           |              |-nginx(11247)
           |              `-nginx(11248)
#pid为'11245'
[root@nginx ~]# cat /run/nginx.pid
11244

nginx配置1

性能优化相关的配置:(参考下面示例)

  1. worker_processes number | auto;

worker进程的数量;通常应该为当前主机的cpu的物理核心数

  1. worker_cpu_affinity cpumask ...;
worker_cpu_affinity auto [cpumask] 提高缓存命中率
CPU MASK: 00000001:0号CPU
                      00000010:1号CPU
                      10000000:7号CPU
worker_cpu_affinity 0001 0010 0100 1000;
worker_cpu_affinity 0101 1010;                       
  1. worker_priority number;

指定worker进程的nice值,设定worker进程优先级:[-20,20]

  1. worker_rlimit_nofile number;

所有worker进程能打开的文件数量上限,最好与ulimit -n 的值保持一致,如65535

示例1.1

在vmware虚拟机设置中添加CPU数量

[root@nginx ~]# vim /etc/nginx/nginx.conf
...
worker_processes auto;    <--worker进程的数量
...


[root@nginx ~]# nginx -s stop
[root@nginx ~]# nginx 
[root@nginx ~]# pstree -p |grep nginx
           |-nginx(67767)-+-nginx(67768)
           |              |-nginx(67769)
           |              |-nginx(67770)
           |              |-nginx(67771)
           |              |-nginx(67772)
           |              |-nginx(67773)
           |              |-nginx(67774)
           |              `-nginx(67775)

示例1.2

cpu绑定、4个CPU分别绑在4个nginx进程上

[root@nginx ~]# vim /etc/nginx/nginx.conf
...
worker_processes 4;    <--
worker_cpu_affinity 0001 0010 0100 1000;    <--
...

#重新加载
[root@nginx ~]# nginx -s reload

图片.png

示例1.3

work进程优先级

[root@nginx ~]# vim /etc/nginx/nginx.conf
...
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
worker_priority  -20;    <--
...

图片.png

示例1.4

并发连接数调整

[root@nginx ~]# vim /etc/nginx/nginx.conf
...
events {
    worker_connections 10240;    <--数值调大
}
...

[root@nginx ~]# ulimit -n 65535
#重新加载
[root@nginx ~]# nginx -s reload

nginx配置2

事件驱动相关的配置:

events {
   ...
}
  • worker_connections #;

每个worker进程所能够打开的最大并发连接数,如10240

总最大并发数:worker_processes * worker_connections

  • use method;

指明并发连接请求的处理方法,默认自动选择最优方法

示例:use epoll;

nginx配置3

事件驱动相关的配置:

  • accept_mutex on | off;

处理新的连接请求的方法;on指由各个worker轮流处理新请求,Off指每个新请求的到达都会通知(唤醒)所有的worker进程,但只有一个进程可获得连接,造成“惊群”,影响性能,默认值为off,可优化为on

  • multi_accept on|off;

此指令默认为off,即默认为一个worker进程只能一次接受一个新的网络连接,on表示每个woker进程可以同时接受所有新的网络连接

nginx配置4(参考下面示例)

调试和定位问题:

  1. daemon on|off;

是否以守护进程方式运行,默认是on,即守护进程方式,off 用于调试或docker环境

  1. master_process on|off;

是否以master/worker模型运行nginx,默认为on,当指定off 将不启动worker

  1. error_log file [level] ;

错误日志文件及其级别;出于调试需要,可设定为debug;但debug仅在编译时使用了“--with-debug”选项时才有效

/path/logfile:    记录到文件中
stderr:                发送到标准错误
syslog:server-address[,parameter=values]    发送到syslog
memory:size         内存
level:debug|info|notice|warn|error|crit|alter|emerg    日志级别

示例4.1

前台执行

[root@nginx ~]# vim /etc/nginx/nginx.conf
...
daemon off;    <--
http {
...

[root@nginx ~]# nginx -s stop
#前台执行、停止'Ctrl+c'、建议测试环境用
[root@nginx ~]# nginx

示例4.2

[root@nginx ~]# vim /etc/nginx/nginx.conf
...
daemon off;
master_process off;    <--
http {
...

#停止服务'Ctrl+c'
[root@nginx ~]# nginx
#启动服务
^C[root@nginx ~]# nginx

图片.png

示例4.3

错误日志

[root@nginx ~]# vim /etc/nginx/nginx.conf
···
error_log /var/log/nginx/error.log;   <--默认路径
...