<深入理解nginx> 二 nginx的配置

本文包含内容
(1)配置文件  
(2)配置文件的语法格式 
(3)运行服务需要具备的基础配置
(4)使用http核心模块配置静态web服务器的方法
(5)反向代理服务器
part 1     运行进程的关系
part 2      配置的语法
块配置项:一个块配置项名 和 一对大括号组成
配置项的语法格式 
A 如果配置项值中包括语法符号,例如空格符,需要使用单引号或者双引号包括配置项目值,每行配置的结尾需要加上分号
配置项名 配置项值1 配置项值2 ...;
B 配置项的注释 #
C 配置项的单位
千字节  K   兆字节  M
时间单位 ms毫秒  s   m分钟   h   d天  w周  M月  y年
D 使用变量
只有少数模块支持变量的使用 , 使用时候在变量的前面加上 $  
注:大部分的模块都必须在nginx.conf中读取某个配置项后,才会在运行时候启用
part 3 基本配置
至少必须加载几个核心模块和一个事件类模块,这些模块运行时候所支持的配置项目称为基本配置-所有其他的模块执行时都依赖的配置项
A 用于调试进程和定位问题的配置项
a 是否以守护进程方式运行nginx
默认是daemon on;
守护进程表示脱离终端并且在后台运行的进程
b 是否以master/worker方式工作
默认是master_process on;
是以一个master进程管理多个worker进程的方式运行
c error日志的设置
error日志是定位nginx问题的最佳工具,可以根据需求设置error日志的路径和级别
默认的路径是 error_log logs/error.log error;
默认情况下是/logs/error.log文件,需要讲文件放在一个磁盘空间足够大的位置
关闭日志文件的唯一方式:将log路径设置为/dev/null
level 是日志的输出级别,取值范围是 
debug info notice warn error crit alert emerg 从左到右依次增大
当设定为一个级别时候,大于或者等于该级别的日志都会被输出到日志文件中
注意:如果日志级别设定到debug,必须在configure 时候加入--with-debug配置项
d 是否处理几个特殊的调试点
用于帮助用户跟踪调试,
如果设置为debug_points stop ,nginx的代码执行到调试点后,会发出SIGSTOP信号,用于调试;如果设置为debug_points abort,会产生一个coredump 文件,通常不使用此选项
e  仅对指定的客户端输出debug级别的日志
这个配置项属于事件类配置,需要放在events{...}
举例:
events {
debug_connection 192.168.1.1;
}
仅仅来自192.168.1.1的请求才会输出debug级别的日志,其他请求仍然使用error_log中配置的日志级别,上面配置对于修复bug很有用,特别是高并发请求下,会发生的问题
f  限制coredump 核心转储文件的大小
当进程发生错误或者收到信号而终止时候,系统会将进程执行时候的内存内容写入一个文件,core文件,作为调试用-核心转储core dumps
当nginx进程出现一些非法操作时候,导致进程直接被操作系统强制结束时候,会生成核心转储core文件,可以从core文件中获取当时的堆栈和寄存器信息,帮助定位
worker_rlimit_core size;
可以限制core文件的大小,有效帮助用户定位问题
g  指定coredump 文件生成目录
working_directory path;
worker进程的工作目录,设置coredump文件所放置的目录,协助定位问题

B 正常运行的配置项
a  定义环境变量 env VAR|VAR=VALUE
举例:  env TESTPATH = /tmp/;
用户直接设置操作系统上的环境变量
b  配置其他的配置文件
include /path/file
举例:
include mime.types;
include vhost/*.conf;
可以将其他的配置文件通过include配置项嵌入到当前的nginx.conf文件中
参数既可以是绝对路径,也可以是相对nginx.conf所在目录的相对路径,参数的值可以是一个明确的文件名,也可以是含有通配符的文件名,可以一次嵌入多个配置文件
c pid文件的路径
默认路径是 pid logs/nginx.pid;
保存master进程ID的pid文件存放的路径,默认和configure执行的参数所指定的路径是相同的,也可以随时修改,文件直接影响nginx是否可以运行
可以从nginx.pid中直接查看pid,使用sudo kill pid 停止nginx服务
d nginx worker进程运行的用户和用户组
默认是  user nobody nobody;
user 用于设置master进程启动后,fork(生成子进程)出的worker进程运行在哪个用户和用户组下面,如果没有指定groupname ,默认和用户名相同
若是在configure 命令执行时候,使用了参数
--user=username --group=groupname
此时在nginx运行的时候,将使用参数中指定的用户和用户组
e 指定nginx worker进程可以打开的最大文件句柄数
设置一个进程可以打开的最大的文件的句柄数
worker_rlimit_nofile limit;
f 限制信号队列
设置每个用户发往nginx的信号队列的大小,当某个用户的信号队列满了,再发送信号将被丢掉
worker_rlimit_sigpending limit;
C 优化性能的配置项
a 进程个数   
默认是   work_processes 1;
worker进程的数量直接影响性能,每个worker进程都是单线程的进程,会调用各个模块实现多种多样的功能,如果这些模块确定不会出现阻塞式调用,进程个数等于内核个数,但是如果会出现阻塞式调用,需要配置稍多一些的worker进程
进程少:业务方面致使用户请求大量读取本地磁盘上的静态资源文件,服务器的内存较小,大部分的请求访问静态资源文件必须读取磁盘,不是内存中的磁盘缓存,磁盘I/O调用会阻塞worker进程少量时间,导致性能下降
进程多:多worker进程可以充分利用多核系统架构,若是worker进程数量大于内核数量,会增大进程之间切换带来的消耗
b  绑定nginx worker进程到指定的cpu内核
举例:如果有四颗cpu内核
worker_processes 4;
worker_cpu_affinity 1000 0100 0010 0001;
每一个worker进程都是非常繁忙的,如果多个worker进程抢同一个cpu,就会出现同步问题,如果每个worker进程独享一个cpu,在内核的调度策略中实现了完全的并发
c  SSL硬件加速
d  系统调用gettimeofday的执行效率
e  进程优先级设置
D  事件类配置项
a   是否打开accept 锁
默认是   accept_mutext on;
accept_mutex 是nginx的负载均衡锁,这把锁可以让多个worker 进程轮流的 序列化 和新的用户建立 tcp连接
当worker建立的连接数量达到最大连接数的7/8时候,将大大减小worker进程试图建立新的tcp连接的机会,实现所有的worker进程上的处理的用户请求的数量尽量接近
accept锁默认是打开的,如果关闭,建立tcp连接的耗时将会更短,但worker进程之间的负载将会非常不均衡,因此不建议关闭它
b  lock文件的路径
默认路径是   lock_file logs/nginx.lock;
accept锁可能需要lock文件,如果accept锁关闭,lock_file配置完全不生效,如果打开了accept锁,由于元素导致nginx不支持原子锁,这时候才会用文件锁实现accept锁,lock文件才会生效
c   使用accept锁后到真正建立连接之间的延迟时间
在使用accept锁后,同一时间只有一个worker进程可以取到accept锁,如果取不到会立刻返回,至少再等定义时间间隔后才能再次试图取锁
举例:
accept_mutex_delay 500ms;
d   批量建立新的连接
默认是  multi_accept off;
当事件模型通知有新的连接时候,尽可能对本次调度中的客户端发起的所有tcp请求都建立连接
e   选择事件模型
默认是  nginx会自动使用最适合的事件模型
可供选择的事件驱动模型有 poll select epoll 三种,epoll 是性能最高的一种
f   每个worker的最大连接数
worker_connections number;
定义每个进程可以同事处理的最大连接数

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容

  • 第一章 Nginx简介 Nginx是什么 没有听过Nginx?那么一定听过它的“同行”Apache吧!Ngi...
    JokerW阅读 32,457评论 24 1,003
  • 上一篇《WEB请求处理一:浏览器请求发起处理》,我们讲述了浏览器端请求发起过程,通过DNS域名解析服务器IP,并建...
    七寸知架构阅读 80,526评论 21 356
  • 1. Nginx的模块与工作原理 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单...
    rosekissyou阅读 10,126评论 5 124
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,099评论 18 139
  • 提供沉浸式状态栏,可调用黑色状态栏模式,判断了小米MIUI和flyme系统独立的黑色状态栏样式可独立调用,提供了一...
    kongzue阅读 1,040评论 1 4