nginx详解

2020-04-30  本文已影响0人  麟之趾a

nginx 模型

异步,非阻塞,事件驱动型

nginx 的用途

nginx 进程

nginx 配置文件说明

fastcgi_params: fastcgi 代理的服务
uwsgi_params: uwsgi代理配置
nginx.conf: nginx主配置文件
mime.conf: mime协议可被浏览器和服务器识别的文件类型

nginx 配置文件模块说明

核心模块: core
标准模块: http (7层代理) steam(TCP流模式的代理)mail(邮件服务)
第三方模块:

nginx.conf 大致说明

main 
  event {}     定义nginx进程的

  http {}    定义 http 服务的
  steam{}  定义 TCP的
  mail {}    定义 mail邮件的

nginx.conf配置详解

# nginx进程相关的
worker_process: auto   
机器有几个cpu核心就写几个,由于一个核心在一个时间只能运行一个进程,如果多于cpu核心的进程就会导致worker进程来回切换,效率不高。
worker_cpu_affinity: auto    手动绑定进程到cpu核心上
绑定进程可以提高cpu缓存的命中率,简单的绑定,比如4个核心,4个进程分别绑定在4个核心上,不用切换进程,从而cpu缓存不会失效,加大缓存命中率。前提次服务器,为nginx的专用机,如果服务器还跑其余的服务,则建议不使用

[root@mysql nginx]# ps axo comm,pid,psr |grep nginx
nginx            10149   0
nginx            10150   0

可以查看nginx进程运行在哪个cpu上,使其对它压测,watch命令监控。来验证worker_cpu_affinity的参数

worker_priority设置[-20,20]  worker进程的优先级,优先级越高,cpu越优先调度

[root@mysql nginx]# ps axo comm,pid,psr,ni |grep nginx
nginx            10149   0   0
nginx            10150   0   0

程序的默认优先级为0
worker_priority  -5
[root@mysql nginx]# ps axo comm,pid,psr,ni |grep nginx
nginx            10149   0   0
nginx            10181   0  -5

worker_rlimit_nofile  worker进程打开文件的数目,注是所有worker进程打开文件的数目
每一个连接都为一个socket,即打开socket的数目

nginx.conf http模块相关的参数

sendfile on

image.png
tcp_nopush  on;
在sendfile模式下生效,由于sendfile on直接从内核空间发送http响应,没有封装http请求头,所以http请求头,在tcp响应后面到达,而tcp_nopush on 是在内核空间等待http响应头到达之后,一起发送给客户端

tcp_nodelay on
每发送一个小的字节比如一个字节,系统会等待小的数据都攒成一个MTU的包发送过去。而tcp_nodelay on 无论多么小的包,都会发送。不会等待,提高了用户体验。必须长连接下生效,因为短连接的情况下没有办法确定,两次发送的客户端是否是同一客户端

## server标签下
server_name  客户端访问的域名,可以写成正则表达试
在多虚拟机下,客户端匹配server_name的机制
1 .有一样的优先匹配
2 .左侧为*号的优先匹配
3 .右侧为*号的优先匹配
4 .正则匹配


location   =|~|~*|^~  uri {}
=  精确匹配
~ 区分大小写匹配
~* 不区分大小写匹配
^~ 从左侧匹配(正常匹配)

匹配uri的优先级
1 . = 精确匹配
2 .^~从左侧正常匹配
3 . ~/~* 正则匹配
4 . /xxx   默认匹配一样的路径
5 . /   默认匹配

root和alias的区别
location /images {
   root  /data
}
root /data, data为images uri的左侧的/,即images 必须在data路径下才能访问到
location /images {
   alias /data
}
alias /data. data为images 右侧的/,即访问images,直接访问到data路径下


rewrite 重写机制
 rewrite  regex(uri)   replacement  [flag]
          替换的uri         要替换成的内容
locaiton uri {
  rewrite
  rewrite
  rewrite
}
last: 相当于continue.uri当匹配到这个标志的rewrite,会重新加载nginx.conf,从头开始再匹配。如新的uri,匹配到location,在进行rewrite,在重新加载nginx.conf,从头开启匹配,如果在匹配到location,会一直循环下去。循环10次,nginx就会返回内部错误
break: 当uri匹配到这个location,这个location发生rewrite,会接着往下加载nginx.conf,而不会重新加载。
redirect: 302 临时重定向
permanent: 301 永久重定向
302 浏览器不会保存跳转记录,301 浏览器会保存跳转记录

last和break 相当于在nginx内部跳转,浏览器不会改变url、
redirect和permanent nginx直接返回浏览器URL,浏览器进行重写url,可进行服务器外跳转

if 判断
if ($variables){}
正则表达式匹配:

==:等值比较;
~:与指定正则表达式模式匹配时返回“真”,判断匹配与否时区分字符大小写;
~*:与指定正则表达式模式匹配时返回“真”,判断匹配与否时不区分字符大小写;
!~:与指定正则表达式模式不匹配时返回“真”,判断匹配与否时区分字符大小写;
!~*:与指定正则表达式模式不匹配时返回“真”,判断匹配与否时不区分字符大小写;
2、文件及目录匹配判断:
-f, !-f:判断指定的路径是否为存在且为文件;
-d, !-d:判断指定的路径是否为存在且为目录;
-e, !-e:判断指定的路径是否存在,文件或目录均可;
-x, !-x:判断指定路径的文件是否存在且可执行;
$variables 为字符串,非空为真,空为假
$ variables 为数字时,非0 为真,0为假


valid_referers  有效的跳转
Syntax: valid_referers none | blocked | server_names | string ...;
Default:    —
Context:    server, location

none:指从浏览器中直接键入
blocked:指referers值为空
server_names:  只从哪个域名跳转
$invalid_referer   只不在$vaild_referer中的内容
if ($invalid_referer){  return 403}
只不是指定的有效的域名就返回403,用于防盗链

客户端相关参数配置

keepalive_timeout    长连接
client_body_buffer_size 客户端请求body的缓冲
send_timeout  响应访问的间隔时间。
当client 请求server端,后client 网络不通,server端响应的间隔时间
client_body_tmp_path  /path  [level1][level2][level3]
客户端post上传文件的地址
[level1][level2][level3]   为3级子目录,因为文件名的md5值,最大值为e,按16进制恰好能代表最大值得md5的字母,所以到e 为16

client_body_tmp_path /data/  2   1  1
2 为 16*16 256个一级子目录
1 为 16 个二级子目录
1 为 16个三级子目录

3 则代表 16*16*16

为什么要划分子目录,因为如果上传到1个目录的话,假设有10万个文件。则不利于查找,和管理。

文化系统相关的参数

AIO on  开启AIO
open_file_cache_max  缓存的最大文件数,注意此处缓存的为文件元数据信息.客户端请求,及读取服务端的文件
gip on
gzip_comp_level 压缩级别
gizp_types  压缩的类型

服务端状态页面

stub_status; 
Active connections: 2 
server accepts handled requests
 2 2 1 
Reading: 0 Writing: 1 Waiting: 1 

Active_connections  活动的连接数
accepts  接受请求的连接数
handle  处理请求的连接数
requests 总的请求的数
全部的请求书----》接受请求的连接数 ------》处理请的连接数

Reading   请求报文的连接数
writing  响应报文的连接数
waiting 在长连接的情况下,第一次返回响应报文的连接,在keepalive_timeout期间等待请求报文的连接数

上一篇 下一篇

猜你喜欢

热点阅读