2019-01-04 nginx企业应用配置

性能优化相关的配置

1、worker_processes number | auto
worker进程的数量;通常应该为当前主机的cpu的物理核心数
2、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;
3、worker_priority number
指定worker进程的nice值,设定worker进程优先级:[-20,20]
4、worker_rlimit_nofile number
worker进程所能够打开的文件数量上限,如65535

事件驱动相关的配置

events {
  ...
}

1、worker_connection number
每个worker进程所能够打开的最大并发连接数数量,如10240
总最大并发数:worker_processes * worker_connections
2、use method
指明并发连接请求的处理方法,默认自动选择最优方法
use epoll;
3、accept_mutex on | off 互斥
处理新的连接请求的方法;on指由各个worker轮流处理新请求,Off指每个新请求的到达都会通知(唤醒)所有的worker进程,但只有一个进程可获得连接,造成“惊群”,影响性能

调试和定位问题

1、daemon on | off
是否以守护进程方式运行nginx,默认是守护进程方式
2、master_process on | off
是否以master/worker模型运行nginx;默认为on
off 将不启动worker
3、error_log file [level]
错误日志文件及其级别;出于调试需要,可设定为debug;但debug仅在编译时使用了“--with-debug”选项时才有效
方式:file /path/logfile;
stderr:发送到标准错误
syslog:server-address[,parameter=values]:发送到syslog memory:size 内存
level:debug|info|notice|warn|error|crit|alter|emerg

http协议的相关配置

http {
  ... ...
  server {
    ...
    server_name
    root
    location [OPERATOR] /uri/ {
      ...
    }
  }
  server {
    ...
  }
}

ngx_http_core_module

  • 与套接字相关的配置:
    1、server {...}
    注意:需要放在http语句块里,也可以在include指定的目录里创建对应格式的文件,比如include /etc/nginx/conf.d/*.conf;,可以在/etc/nginx/conf.d/目录里创建对应的.conf结尾的文件。也可以自己定义一个include,比如include /etc/nginx/conf.d/vhosts/*.conf;
    配置一个虚拟主机
server {
  listen address[:PORT]|PORT;
  server_name SERVER_NAME;
  root /PATH/TO/DOCUMENT_ROOT;
}

2、listen PORT|address[:port]|unix:/PATH/TO/SOCKET_FILE
listen address[:port] [default_server] [ssl] [http2 | spdy] [backlog=number] [rcvbuf=size] [sndbuf=size]
default_server 设定为默认虚拟主机
ssl 限制仅能够通过ssl连接提供服务
backlog=number 超过并发连接数后,新请求进入后援队列的长度
rcvbuf=size 接收缓冲区大小
sndbuf=size 发送缓冲区大小
注意
(1)基于port;
listen PORT; 指令监听在不同的端口
(2)基于ip的虚拟主机
listen IP:PORT; IP地址不同
(3)基于hostname
server_name fqdn; 指令指向不同的主机名
3、server_name name ...;
虚拟主机的主机名称后可跟多个由空白字符分隔的字符串
支持*通配任意长度的任意字符
server_name *.magedu.com www.magedu.*
支持~起始的字符做正则表达式模式匹配,性能原因慎用
server_name ~^www\d+\.magedu\.com$
说明:\d表示[0-9]
匹配优先级机制从高到低:
(1)首先是字符串精确匹配 如:www.magedu.com
(2)左侧*通配符 如:*.magedu.com
(3)右侧*通配符 如:www.magedu.*
(4)正则表达式 如:~^.*\.magedu\.com$
(5)default_server
4、tcp_nodelay on | off;
在keepalived模式下的连接是否启用TCP_NODELAY选项
当为off时,延迟发送,合并多个请求后再发送
默认On时,不延迟发送
可用于:http,server,location
5、sendfile on | off
是否启用sendfile功能,在内核中封装报文直接发送
默认Off
6、server_tokens on | off | build | string
是否在响应报文的Server首部显示nginx版本
off为隐藏nginx版本

  • 定义路径相关配置
    7、root
    设置web资源的路径映射;用于指明请求的URL所对应的文档的目录路径,可用于http,server,location,if in location
server {
  ...
  root /data/www/vhost1;
}

示例:
http://www.magedu.com/images/logo.jpg
-->/data/www/vhost1/images/logo.jpg
8、location [=||*|^~] uri {...}
location @name {...}
在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射;nginx会根据用户请求的URI来检查定义的所有location,并找出一个最佳匹配,而后应用其配置
示例1:

server {
  ...
  server_name www.magedu.com;
  location /images/ {
    root /data/imgs/;
  }
}
http://www.magedu.com/images/logo.jpg
-->/data/imgs/images/logo.jpg

示例2:

server {
  listen 80;
  server_name *.a.com;
  root /data/sitea;
  location /news {
    root /app/sitea/;
  }
}
http://www.a.com
-->/data/sitea/index.html
http://www.a.com/news
-->/app/sitea/news/index.html
  • =:对URI做精确匹配;
location = / {
  ...
}
http://www.magedu.com/  匹配
http://www.magedu.com/index.html  不匹配
  • ^~:对URI的最左边部分做匹配检查,不区分字符大小写
  • ~:对URI做正则表达式模式匹配,区分字符大小写
  • ~*:对URI做正则表达式模式匹配,不区分大小写
  • 不带符号:匹配起始于此URI的所有的URI
  • 匹配优先级从高到低:
    =,^,/~*,不带符号
    9、alias path;
    路径别名,文档映射的另一种机制;仅能用于location上下文
    示例:
http://www.magedu.com/bbs/index.php
location /bbs/ {
  alias /web/forum/;
}  --> /web/forum/index.html
location /bbs/ {
  root /web/forum/;
}  --> /web/forum/bbs/index.html

注意:location中使用root指令和alias指令的意义不同
(a)root,给定的路径对应于location中的/uri/左侧的/
(b)alias,给定的路径对应于location中的/uri/右侧的/
10、index file ...;
指定默认网页文件,注意:ngx_http_index_module模块
11、error_page code ... [=[response]] uri;
模块:ngx_http_core_module
定义错误页,以指定的响应状态码进行响应
可用位置:http,server,location,if in location

error_page 404 /404.html
error_page 404 =200 /404.html    ---把404重定向到200,防止浏览器劫持404错误页面

示例:

server {
  listen 80;
  server_name www.a.com;
  root /data/sitea/;
  error_page 404 =200 /404.html;
  location /404.html {
    root /data/sitea/error/;
  }
}

12、try_files file ... uri;
try_files file ... =code;
按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有的文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部URI的指向。最后一个参数是回退URI且必须存在,否则会出现内部500错误

location /images/ {
  try_files $uri /images/default.gif;    ---访问http://www.a.com/images/a.jpg,$uri则为a.jpg
}
location / {
  try_files $uri $uri/index.html $uri.html =404;
}
  • 定义客户端请求的相关配置
    13、keepalive_timeout timeout [header_timeout];
    设定保持连接超时时长,0表示禁止长连接,默认为75s
    14、keepalive_requests number;
    在一次长连接上所允许请求的资源的最大数量
    默认为100
    15、keepalive_disable none | browser ...
    对哪种浏览器禁用长连接
    16、send_timeout time;
    向客户端发送响应报文的超时时长,此处是指两次写操作之间的间隔时长,而非整个响应过程的传输时长
    17、client_body_buffer_size size;
    用于接收每个客户端请求报文的body部分的缓冲区大小;默认为16k;超出此大小时,其将被暂存到磁盘上的由下面client_body_temp_path指令所定义的位置
    18、client_body_temp_path path [level1 [level2 [level3]]];
    设定存储客户端请求报文的body部分的临时存储路径及子目录结构和数量
    目录名为16进制的数字;
    client_body_temp_path /var/tmp/client_body 1 2 2
    1 1级目录占1位16进制,即2^4=16个目录 0-f
    2 2级目录占2位16进制,即2^8=256个目录 00-ff
    2 3级目录占2位16进制,即2^8=256个目录 00-ff
正常upload文件后要查找文件的话,如果文件太多就不好找,所以需要用到该方法
利用文件的哈希值
sha1sum test.sh 
b2dc1fdeca0f2f0b396445b68b5eaf72516709ec  test.sh
mkdir /c/9e/70/    ---数据存放在该目录下
可以创建16*256*256=1048576个目录
  • 对客户端进行限制的相关配置
    19、limit_rate rate;
    限制响应给客户端的传输速率,单位是bytes/second
    默认值0表示无限制
    20、limit_expect method ... { ... },仅用于location
    限制客户端使用除了指定的请求方法之外的其它方法
    method:GET,HEAD,POST,PUT,DELETE
    MKCOL,COPY,MOVE,OPTIONS,PROFIND,
    PROPPATCH,LOCK,UNLOCK,PATCH
limit_expect GET {
  allow 192.168.1.0/24;
  deny all;
}除了GET和HEAD之外其它方法仅允许192.168.1.0/24网段主机使用
  • 文件操作优化的配置
    21、aio on | off | threads[=pool];
    是否启用aio功能
    22、directio size | off;
    当文件大于等于给定大小时,例如directio 4m,同步(直接)写磁盘,而非写缓存
    23、open_file_cache off;
    open_file_cache max=N [inactiv=time];
    nginx可以缓存以下三种信息:
    (1)文件元数据:文件的描述符、文件大小和最近一次的修改时间
    (2)打开的目录结构
    (3)没有找到的或者没有权限访问的文件的相关信息
    max=N:可缓存的缓存项上限;达到上限后会使用LRU算法实现管理
    inactive=time:缓存项的非活动时长,在此处指定的时长内未被命中的或命中的次数少于open_file_cache_min_uses指令所指定的次数的缓存项即为非活动项,将被删除
    24、open_file_cache_errors on | off;
    是否缓存查找时发生错误的文件一类的信息
    默认值为off
    25、open_file_cache_min_uses number;
    open_file_cache指令的inactive参数指定的时长内,至少被命中此处指定的次数方可被归类为活动项
    默认值为1
    26、open_file_cache_valid time;
    缓存项有效性的检查频率
    默认值为60s
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容

  • I/O模型: 阻塞型、非阻塞型、复用型、信号驱动型、异步 同步/异步:关注消息通知机制 消息通知:同步:等待对方返...
    Net夜风阅读 2,001评论 0 1
  • 1.简介:  Nginx:engine X ,2002年,开源,商业版 http协议:web服务器(类似于ht...
    尛尛大尹阅读 1,863评论 0 3
  • I/O模型Nginx介绍Nginx的安装和目录结构Nginx的配置Nginx的编译安装 一、I/O模型 (一)I/...
    哈喽别样阅读 890评论 0 4
  • Nginx简介 解决基于进程模型产生的C10K问题,请求时即使无状态连接如web服务都无法达到并发响应量级一万的现...
    魏镇坪阅读 1,997评论 0 9
  • 一、安装Nginx: 1、解决依赖关系 yum groupinstall "Development Tools" ...
    不排版阅读 858评论 0 0