1.1 配置文件说明
nginx 官方帮助文档:http://nginx.org/en/docs/
Nginx的配置文件的组成部分:
- 主配置文件:nginx.conf
- 子配置文件: include conf.d/*.conf
- fastcgi(php), uwsgi(python),cgi等协议相关的配置文件
- mime.types:支持的mime类型,MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型
- MIME消息能包含文本、图像、音频、视频以及其他应用程序专用的数据,是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
1.1.1 Nginx 配置文件格式说明
配置文件由指令与指令块构成
每条指令以;分号结尾,指令与值之间以空格符号分隔
可以将多条指令放在同一行,用分号分隔即可,但可读性差,不推荐
指令块以{
}大括号将多条指令组织在一起,且可以嵌套指令块
include语句允许组合多个配置文件以提升可维护性
使用#符号添加注释,提高可读性
使用$符号使用变量
部分指令的参数支持正则表达式
1.1.2 Nginx 主配置文件的配置指令方式
directive value [value2 ...];
注意
(1) 指令必须以分号结尾
(2) 支持使用配置变量
内建变量:由Nginx模块引入,可直接引用
自定义变量:由用户使用set命令定义,格式: set variable_name value;
引用变量:$variable_name
1.1.3 Nginx的主配置文件结构
主配置文件结构:四部分
main block:主配置段,即全局配置段,对http,mail都有效
# 事件驱动相关的配置
event {
...
}
# http/https 协议相关配置段
http {
...
}
# 默认配置文件不包括下面两个块
# mail 协议相关配置段
mail {
...
}
# stream 服务器相关配置段
stream {
...
}
1.1.4 Nginx默认配置文件nginx.conf的文件格式说明
文件路径:/usr/local/nginx/conf/nginx.conf
# 全局配置端,对全局生效,主要设置nginx的启动用户/组,启动的工作进程数量,工作模式,Nginx的PID路径,日志路径等。
user nginx nginx;
worker_processes 1; # 启动工作进程数数量
events {
# events #设置快,主要影响nginx服务器与用户的网络连接,比如是否允许同时接受 多个网络连接,使用哪种事件驱动模型
# 处理请求,每个工作进程可以同时支持的最大连接数,是否开启对多工作进程下的网络 连接进行序列化等。
worker_connections 1024;#设置单个nginx工作进程可以接受的最大并发,作为web服务器的时候最大并发数为
# worker_connections *worker_processes,作为反向代理的时候为
# (worker_connections * worker_processes)/2
}
http {
#http块是Nginx服务器配置中的重要部分,缓存、代理和日志格式定义等绝大多数功能和第三方模块都
# 可以在这设置,http块可以包含多个server块,而一个server块中又可以包含多个location块,
# server块可以配置文件引入、MIME-Type定义、日志自定义、是否启用sendfile、连接超时时间和
# 单个链接的请求上限等。
include mime.types;
default_type application/octet-stream;
sendfile on; # 作为web服务器的时候打开sendfile加快静态文件传输,指定是否使用
# sendfile系统调用来传输文件
# sendfile系统调用在两个文件描述符之间直接传递数据(完全在内核中操作)
#从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,操作效率很高,被称之为零拷贝,
# 硬盘 >> kernel buffer (快速拷贝到kernelsocketbuffer) >>协议栈。
keepalive_timeout 65; # 长连接超时时间,单位是秒
server {
# 设置一个虚拟机主机,可以包含自己的全局快,同时也可以包含多个location模块
# 比如本虚拟机监听的端口、本虚拟机的名称和IP配置,多个server 可以使用一个端口比 如都使用 #80端口提供web服务
listen 80; # 配置server监听的端口
server_name localhost;# 本server的名称,当访问此名称的时候nginx会调用当前serevr内部的配置进程匹配。
location / {
# location其实是server的一个指令,为nginx服务器提供比较多而且灵活的指令
# 都是在location中体现的,主要是基于nginx接受到的请求字符串
# 对用户请求的UIL进行匹配,并对特定的指令进行处理
# 包括地址重定向、数据缓存和应答控制等功能都是在这部分实现
# 另外很多第三方模块的配置也是在location模块中配置。
root html; # 相当于默认页面的目录名称,默认是安装目录的相对路径,可以使用绝对路径配置。
index index.html index.htm; # 默认的页面文件名称
}
error_page 500 502 503 504 /50x.html; # 错误页面的文件名称
location = /50x.html {
# location处理对应的不同错误码的页面定义到/50x.html
# 这个跟对应其server中定义的目录下。
root html; # 定义默认页面所在的目录
}
}
# 和邮件相关的配置
# mail {
# ...
# } mail 协议相关配置段
# tcp代理配置,1.9版本以上支持
# stream {
# ...
# } stream 服务器相关配置段
# 导入其他路径的配置文件
# include /apps/nginx/conf.d/*.conf
}
1.2 全局配置
Main 全局配置段常见的配置指令分类
- 正常运行必备的配置
- 优化性能相关的配置
- 用于调试及定位问题相关的配置
- 事件驱动相关的配置
1.2.1全局配置说明:
文件路径:/usr/local/nginx/conf/nginx.conf
user nginx nginx; # 启动Nginx工作进程的用户和组
worker_processes [number | auto]; # 启动Nginx工作进程的数量,一般设为和CPU核心数相同
worker_cpu_affinity 00000001 00000010 00000100 00001000 | auto ;
#将Nginx工作进程绑定到指定的CPU核心,默认Nginx是不进行进程绑定的,绑定并不是意味着当前nginx进程独占以一核心CPU,但是可以保证此进程不运行在其他核心上,这就极大减少了nginx的工作进程在不同的cpu核心上的来回跳转,减少了CPU对进程的资源分配与回收以及内存管理等,因此可以有效的提升nginx服务器的性能。
# worker绑定到cpu
CPU MASK: 00000001:0号CPU
00000010:1号CPU
...
10000000:7号CPU
#错误日志记录配置
语法:error_log file [debug | info | notice | warn | error | crit | alert | emerg]
#error_log logs/error.log;
#error_log logs/error.log notice;
error_log /usr/local/nginx/logs/error.log error;
# pid文件保存路径
pid /usr/local/nginx/logs/nginx.pid;
worker_priority 0; # 工作进程优先级,-20~20(19)
worker_rlimit_nofile 65536; # 所有worker进程能打开的文件数量上限,
# 包括:Nginx的所有连接(例如与代理服务器的连接等)
# 而不仅仅是与客户端的连接
# 另一个考虑因素是实际的并发连接数不能超过系统级别的最大打开文件数的限制
# 最好与ulimit -n 或者limits.conf的值保持一致
daemon off; # 前台运行Nginx服务用于测试、docker等环境。
master_process off|on; # 是否开启Nginx的master-worker工作模式,仅用于开发调试场景,默认为on
events {
worker_connections 65535; # 设置单个工作进程的最大并发连接数
use epoll; # 使用epoll事件驱动,
# Nginx支持众多的事件驱动,
# 比如:select、poll、epoll,只能在events模块中设置
accept_mutex on; # on为同一时刻一个请求轮流由work进程处理,
# 而防止被同时唤醒所有worker
# 避免多个睡眠进程被唤醒的设置,默认为off
# 新请求会唤醒所有worker进程,此过程也称为"惊群"
# 因此nginx刚安装完以后要进行适当的优化。建议设置为on
multi_accept on; # on时Nginx服务器的每个工作进程可以同时接受多个新的网络连接
# 此指令默认为off,
# 即默认为一个工作进程只能一次接受一个新的网络连接
# 打开后几个同接受多个。建议设置为on
}
1.2.2 全局配置参数优化调整
# 开启自动定义的工作进程及将工作进程绑定到CPU核心
[root@nginx ~]# grep -c ^processor /proc/cpuinfo # 通过查看CPU的详细信息文件来确定几核心
2
[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
user nobody; -- 修改指定的用户
worker_processes auto; -- 修改为自动开启多核心进程
worker_cpu_affinity 0001 0010; -- 添加双核绑定进程
[root@nginx ~]# nginx -s reload
[root@nginx ~]# ps aux | grep nginx
root 47973 0.0 0.2 10008 3644 ? Ss 13:28 0:00 nginx: master process nginx
nobody 48057 0.0 0.2 13904 4968 ? S