浅谈Nginx主配置文件

泪湿孤枕 提交于 2020-01-02 15:32:45

1️⃣ Nginx配置文件组成部分

  • Nginx的配置⽂件的组成部分: 主配置⽂件:nginx.conf,⼦配置⽂件 include conf.d/*.conf
  • 主配置文件各种配置段的的详细配置选项信息见:http://nginx.org/en/docs/ngx_core_module.html
  • 配置文件的结构:
    • 段:如http{}event{}server{}location{}等,段可以并列,也可以嵌套。
    • 块:指的就是在段里定义的一组directives(配置指令)。
    • directive:指的就是块里的一条条配置指令。指令定义方法:directive value [value2 ...];。
  • 注意:
    (1) 指令必须以分号结尾。
    (2)嵌套的段是有层级结构的,比如http段里,遵循http{}–>server{}–>location{}这种嵌套结构。
    (3) 支持使用配置变量:
    • 内建变量:由Nginx模块引入,可直接引用。
    • 自定义变量:由用户使用set命令定义。
    • 定义变量:set variable_name value;
    • 引用变量:$variable_name

2️⃣ Nginx主配置文件结构

[root@s2 ~]# grep -v "#" /apps/nginx/conf/nginx.conf | grep -v "^$"
# 全局配置端,对全局⽣效,主要设置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 (快速拷⻉到
kernelsocket buffer) >>协议栈。
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
}

3️⃣ Nginx 全局配置

🅿 1.正常运行必备的配置

  • user user [group];
    指定worker进程的运行身份,如组不指定,默认和用户名同名,默认为nobody用户和nobody组

  • pid /PATH/TO/PID_FILE;
    指定存储nginx主进程PID的文件路径,服务关闭时文件消失

  • include file | mask;
    指明包含进来的其它配置文件片断

  • load_module file;
    模块加载配置文件:/usr/share/nginx/modules/*.conf
    指明要装载的动态模块路径: /usr/lib64/nginx/modules

🅿 2.性能优化相关的配置

  • worker_processes number | auto;
    worker进程的数量,通常应该为当前主机的cpu的物理核心数

  • worker_cpu_affinity cpumask...;
    worker_cpu_affinity auto [cpumask] 减少进程切换,提高缓存命中率.
    CPU MASK:以右端为开始从0数起命名CPU,如果启用则该位为1,不启用则该位为0,例如“00101010”代表系统共有8颗CPU,启用第1, 3, 5号CPU
    将Nginx⼯作进程绑定到指定的CPU核⼼,默认Nginx是不进⾏进程绑定的,绑定并不是意味着当前nginx进程独占以⼀核⼼CPU,但是可以保证此进程不会运⾏在其他核⼼上,这就极⼤减少了nginx的⼯作进程在不同的cpu核⼼上的来回跳转,减少了CPU对进程的资源分配与回收以及内存管理等,因此可以有效的提升nginx服务器的性能。

  • 测试:系统共有4颗CPU,现在要求worker进程绑定第0,2颗CPU

vim /etc/nginx/nginx.conf                   / apt安装的默认位置
worker_processes 2;
worker_cpu_affinity 0100 0001;
nginx -s reload
root@ubuntu1804-39:~# ps axo pid,cmd,psr,user | grep nginx  / 查看配置效果
  2185 nginx: master process /usr/   1 root
  2411 nginx: worker process         2 nginx
  2412 nginx: worker process         0 nginx
  2698 grep --color=auto nginx       2 root
  • worker_priority number;
    指定worker进程的nice值,设定worker进程优先级:[-20,20]
  • worker_rlimit_nofile number;
    单个worker进程所能够打开的文件数量上限,如65535
    这个数字包括Nginx的所有连接(例如与代理服务器的连接等),⽽不仅仅是与客⼾端的连接,另⼀个考虑因素是实际的并发连接数不能超过系统级别的最⼤打开⽂件数的限制.

🅿 3.事件驱动相关的配置

  • 格式:
    events {

    }

  • 1.worker_connections number;
    每个worker进程所能够打开的最大并发连接数数量
    总最大并发数:worker_processes* worker_connections

  • 2.use method;
    指明并发连接请求的处理方法,默认自动选择最优方法
    如果系统是Linux,会自动使用epoll方法;如果是FreeBSD和macOS,会自动使用kqueue;如果是Solaris和HP/UX,会自动使用/dev/poll
    有两个普通方法select和poll,已经被淘汰,不做讨论

  • 3.accept_mutex on | off;
    是否接受互斥。
    指的是处理新的连接请求的方法;on指由各个worker轮流处理新请求 ,Off指每个新请求的到达都会通知(唤醒)所有的worker进程,但 只有一个进程可获得连接,造成“惊群”,影响性能,默认on

  • 4.multi_accept on;
    Nginx服务器的每个⼯作进程可以同时接受多个新的⽹络连接,但是需要在配置⽂件中配置,此指令默认为关闭,
    即默认为⼀个⼯作进程只能⼀次接受⼀个新的⽹络连接,打开后⼏个同时接受多个。

🅿 4.调试和定位配置

  • daemon on | off;
    是否以守护进程方式运行nignx,默认是守护进程方式
    前台运⾏Nginx服务⽤于测试、docker等环境

  • master_process on | off;
    是否以master/worker模型运行nginx;默认为on,off 将不启动worker
    仅⽤于开发调试场景

  • error_log file [level];
    错误日志文件及其级别

  • 错误⽇志记录配置,语法:error_log file [debug | info | notice | warn | error | crit | alert | emerg]
    error_log logs/error.log;
    error_log logs/error.log notice;
    error_log /apps/nginx/logs/error.log error


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!