@[TOC](Nginx 全局设置 性能优化 小节2)
nginx配置
- 配置文件的组成部分:
- 主配置文件:nginx.conf
子配置文件 include conf.d/*.conf- fastcgi,uwsgi,scgi等协议相关的配置文件
- mime.types:支持的mime类型
- 主配置文件的配置指令:
- directive value [value2 ...];
- 注意:
(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 全局配置段常见的配置指令分类
- 正常运行必备的配置
- 优化性能相关的配置
- 用于调试及定位问题相关的配置
- 事件驱动相关的配置
- 帮助文档
- 正常运行必备的配置:
user
指定worker进程的运行身份,如组不指定,默认和用户名同名 Syntax: user user [group]; Default: user nobody nobody; Context: mainpid /PATH/TO/PID_FILE;
指定存储nginx主进程PID的文件路径
include file | mask;
指明包含进来的其它配置文件片断
load_module file;
模块加载配置文件: /usr/share/nginx/modules/*.conf
指明要装载的动态模块路径: /usr/lib64/nginx/modules
| 名称 | 环境 | IP/GW | 安装方式 |
|---|---|---|---|
| nginx10 | Centos7 | 37.10/GW37.2 | 编译 |
| nginx | Centos7 | 37.7/GW37.2 | YUM |
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;
}
}
}
[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
性能优化相关的配置:(参考下面示例)
- worker_processes number | auto;
worker进程的数量;通常应该为当前主机的cpu的物理核心数
- 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;
- worker_priority number;
指定worker进程的nice值,设定worker进程优先级:[-20,20]
- 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
示例1.3
work进程优先级
[root@nginx ~]# vim /etc/nginx/nginx.conf
...
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
worker_priority -20; <--
...
示例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(参考下面示例)
调试和定位问题:
- daemon on|off;
是否以守护进程方式运行,默认是on,即守护进程方式,off 用于调试或docker环境
- master_process on|off;
是否以master/worker模型运行nginx,默认为on,当指定off 将不启动worker
- 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
示例4.3
错误日志
[root@nginx ~]# vim /etc/nginx/nginx.conf
···
error_log /var/log/nginx/error.log; <--默认路径
...