Nginx基础配置

摘要:
在Nginx配置中,至少需要加载几个核心模块和一个事件模块。Level是日志的输出级别。选项包括debug、info、notice、warn、error、crit、alert和emerg。级别从左到右增加。nginx不会打印级别低于配置项的日志。如果调试已配置,如果点已停止,Nginx将在运行到调试点时发送SIGSTOP信号进行调试。当Nginx进程因异常而被迫结束时,将生成所需的核心文件。您可以从核心文件中获取当前堆栈和寄存器信息,以确保我们能够找到问题。此配置可以限制Nginx服务的核心文件大小。
  Nginx的配置中,至少需要加载几个核心模块和一个事件模块。这些模块运行所支持的配置项被称为基本配置---其他模块执行时的依赖配置项。
 
 
本文主要记录基本配置项的用法,这里主要分四类来进行记录:
1.用于调试、定位问题的
2.正常运行的
3.优化性能的
4.事件类
在Nginx中有一些配置项,不需要显式配置,它们具有一个默认的值,比如daemon、pid。
 
1.用于调试、定位问题的
1)是否以守护进程方式运行Nginx
语法:daemon on|off;
默认:deamon on;
注:守护进程是脱离终端并在后台运行的进程,它不会输出信息在任何终端上。
 
2)是否以master/worker方式工作
语法:master_process on|off;
默认:master_process on;
 
3)error日志设置
语法:error_log pathfile level;
默认:error_log logs/error.log error;
注:error日志是定位Nginx问题的最佳日志,我们可以根据自己的需要修改日志的路径与等级。pathfile是一个具体文件,如果需要关闭nginx的日志输出的话,可以将pathfile改成/dev/null,熟悉linux应该都知道,这就是一个黑洞。level是日志的输出级别,可选项有debug、info、notice、warn、error、crit、alert、emerg,从左到右级别依次增大,nginx不会打印级别低于配置项的日志。
 
4)是否处理几个特殊的调试点
语法:debug_points stop|abort;
注:该配置项是用于跟踪调试Nginx的,Nginx在一些关键的错误逻辑中加入了调试点。如果配置debug_point为stop的话,Nginx运行到调试点时将会发出SIGSTOP信号用于调试。如果debug_point为abort的话,将会产生一个coredump文件,可以使用gdb来查看当时的信息。一般情况下都不会使用到这个配置项。
 
5)仅对指定客户端输出debug日志
语法:debug_connection IP|CIDR
events { debug_connection 10.224.66.14;
debug_connection 10.224.57.0/24;
}
注:该配置其实是一个事件类的配置,它必须在events块配置中才有效,值可以是IP地址或者CIDR地址。这样的话,只有来自于配置项的请求才会打印debug日志,其他请求还是按照error_log的配置输出。
 
6)限制coredump核心转载文件大小
语法:worker_rlimit_core size;
在linux系统中,当进程异常中断时,系统将会把进程执行时的内存内容写入到一个core文件,用于调试,这就是所谓的核心转载(core dumps)。当Nginx进程出现异常被强制结束时,就会生成想要的core文件,可以从core文件中获取当时的堆栈和寄存器等信息,来保证我们定位问题。但是这个core中有大量的信息不一定是我们想要的,而且不加限制的话,可能一个core文件就会达到数G的大小,会造成空间占用。通过这个配置可以限制Nginx服务的core文件大小。
 
7)指定coredump文件生成目录
语法:working_directory path;
work进程的工作目录,这个配置的唯一用处就是设置coredump文件的目录。
 
2.正常运行的
1)定义环境变量
语法:env VAR|VAR=VALUE;
该配置可以让用户直接设置操作系统的环境变量。如:
env TESTPATH=/tmp/;
 
2)导入其它配置文件
语法:include pathfile;
include可以将其它配置文件导入到当前的nginx.conf文件中,它的参数可以是相当路径或者绝对路径,也可以是含通配符的文件名。
include mime.type;
include vhost/*.conf
 
3)pid文件的路径
语法:pid path/file;
默认:pid logs/nginx.pid;
保持master进程id的pid文件所在的路径,默认是configure执行时指定的--pid-path路径,可以随时修改,但是需要确保Nginx服务有权在指定的路径下创建文件。
 
4)Nginx worker进程运行的用户与用户组
语法:user username[groupname];
默认: user nobody nobody;
user设置worker进程运行在哪个用户和用户组下,当只有一个配置值时,用户组名与用户名一致。如果用户在configure执行时使用--user=username和--group=groupname时,Nginx将会使用参数中指定的用户与用户名。
 
5)最大句柄描述符数
语法:worker_rlimit_nofile limit;
设置一个worker进程可以打开的最大文件句柄数。
 
6)限制信号队列
语法:worker_rlimit_sigpending limit;
设置每一个用户发给Nginx的信号队列大小,当用户发送的信号量沾满了信号队列,后续的信号Nginx将会直接丢掉。
 
3.性能优化
1)worker进程个数
语法:worker_processes number;
默认:worker_processes 1;
设置在worker运行方式下,worker进程的个数,这里在前文中有详细介绍。
 
2)worker进程绑定CPU
语法:worker_cpu_affinity cpumask[cpumask...]
例:
worker_processes 4;
worker_cpu_affinity 1000 0100 0010 0001;
将worker进程绑定到指定的CPU上,可以实现内核调度策略上的并发。
 
3)SSL硬件加速
语法:ssl_engine device;
如果服务器上有SSL硬件加速设备的话,我们可以使用ssl_engine配置来加快SSL协议的处理速度,下面附上查看是否存在SSL硬件加速设备的方法。
openssl engine -t
 
4) gettimeofday执行频率
语法:timer_resolution t;
默认情况下,每一次内核时间调用返回时,都会执行一次gettimeofday,它是使用内核的时间来更新Nginx的缓存中的时间。在以前的linux内核中,需要进行内核态到用户态的内存复制,大于系统的消耗不小,但是现在的内核中只需要访问共享内存页,代价不大,可以不进行配置。
 
5)worker进程优先级
语法:worker_priority nice;
默认:worker_priority 0;
该配置用户设置worker进程的nice优先级,在linux系统中,当很多进程都处于可执行的姿态时,系统将会按照进程的优先级来决定本次内核选择先运行哪一个进程。同时,如果进程的优先级更高的话,可以分配到的时间片越大。nice值是进程的静态优先级,可取值-20-+19,数值越低优先级越高。如果想要Ngin占用更加多的系统资源的话,可以调小nice值,但是不建议小于-5,因为-5是系统内核进程的nice值。
 
4.事件类
1)是否打开accept锁
语法:accept_mutex [on|off]
默认:accept_mutex on;
accept_mutex是Nginx的负载均衡锁,该锁可以使多个worker进程轮流的、序列化的与客户端建立TCP连接。如果某一个worker进程的连接数达到了worker_connections配置值的7/8时,它会减少与客户端的TCP连接,尽量使得worker进程的请求数相近。
accept默认打开,关闭的话,会减少TCP连接的时间,但是会造成worker进程之间的负载很不均衡。
 
2)lock文件路径
语法:locak_file path/file;
默认:lock_file logs/nginx.lock;
当accept锁关闭时,lock_file配置完成不生效。只有在打开了accept锁,并且由于一些原因(编译程序或者操作系统等因素)导致Nginx不支持原子锁的时候,才会使用文件锁来实现accept锁。
 
3)连接建立延迟时间
语法:accept_mutex_delay Nms;
默认:accept_mutex_delay 500ms;
该配置只有在accept锁开启的时候才有效,在开启accept锁的时候,同一时间只有一个worker进程可以拿到锁,该锁不是堵塞锁,拿不到会直接返回。如果一个worker进程没有拿到锁的话,至少需要等配置的延迟时间之后才能再次获取该锁。
 
4)批量建立连接
语法:multi_accept [on|off];
默认:multi_accept off;
当事件模型通知有新的连接的时候,尽可能的对本次调度中客户端的所有TCP都建立连接。
 
5)选择事件模型
语法:use [kqueue|rtsig|epoll|/dev/poll|select|poll|eventport];
Nginx会自动去使用最合适的事件模型,linux系统中可以选择poll、select与epoll,其中epoll性能最好。
 
6)进程最大连接数
语法:worker_connections number;
该配置决定每一个worker进程可以同时处理的最大连接数。

免责声明:文章转载自《Nginx基础配置》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇js 递归获取子节点所有父节点,深度遍历获取第一个子树移动端-手机端-日历选择控件(支持Zepto和JQuery)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Nginx 原理解析和配置摘要

前言 Nginx 作为高性能的 http 服务器,知名度不必多言,相似产品中无出其右。本篇随笔记录我认为较为重要的原理和配置。 1. 原理解析 1.1 结构 以上是 Nginx 的结构图,其包含一个 master 和 n 个 worker,master_processes 用于外部通信和统一管理其下 worker_processes ,因此可以做到重启时...

FreeRTOS再学习——2nd——信号量和优先级反转问题

信号量: 信号量是操作系统中重要的一部分,信号量一般用来进行资源管理和任务同步,FreeRTOS中信号量又分为二值信号量、计数型信号量、互斥信号量和递归互斥信号量。 不同的信号量其应用场景不同,但有些应用场景是可以互换着使用的。 二值信号量只有0和1,表示信号量的两个状态,适用于立flag 信号量的另一个重要的应用场合就是任务同步,用于任务与任务或中断与...

tomcat和nginx配置java服务器

tomcat和nginx配置java服务器 环境配置 服务器配置  写了这么久的SSM,做了一个简单的网站【没有加入数据库】,然后就要开始部署javaWEB的云服务器了。本次搭建使用的Tomcat和nginx。 服务器系统:Ubuntu16.04 Tomcat nginx 安装java环境【oracle java8】 如果在中将 添加仓库源...

linux 命令收集 阿里云nginx升级等 查看磁盘空间 版本等

—————————————————— 查磁盘 df -h此命令直观的呈现出磁盘大小有多少Gdf -hl文件系统 容量 已用 可用 已用% 挂载点/dev/hdb2 75G 75G 0 100% /就是HD硬盘借口的第二个硬盘(b)上,里面的第二个分区(2),容量是75G,用了75G,可用是0,因此利用率是100%, 他被挂载到根分区目录上(/)。 http...

前端访问服务器

本地部署前端访问服务器    PS:本系列内容进度节奏会放的很慢,每次知识点都尽量少一点,这样大家接触的知识点少了,会更容易理解,因为少即是多。另外,对于后面代码部分,虽然尽量不用那些复杂的封装和类,但它并不表示看了就能全部记住,并懂得每个函数的用法,在什么时候去调用,清楚它输入的参数类型、能处理的参数类型和输出的结果是什么。它需要动手去调用,去大量的...

nginx配置时server_name配的不一样还能正常访问

  原先server_name 配的是api.test.toutiao.applet.rockysaas.com,监听的是80端口,http。后来域名改成了api-test.tbk.rockysaas.com,监听443,https。但是发现原先的api.test.toutiao.applet.rockysaas.com还能访问。 server { #...