Nginx4/4---高性能Nginx

1.Nginx监听端口

基本语法: listen address:port
默认:listen 80;
作用:listen参数决定Nginx服务器如何监听端口。在listen后可以加IP地址,端口和主机名,非常灵活。

例如:listen 127.0.0.1:8000、listen 127.0.0.1;默认监听80接口

扩展语法:

listen address:port [default(deprecated in in 0.8.21)|default_server|[backlog=num|rcvbuf=size |sndbuf=size|accept_filter=filter|deferred|bind|ipv6only=[on|off]| ssl]]

下面说明listen可用参数的意义

参数 意义
default 将所在得server设为整个web服务的默认server块。如果没有这个设置,那么会以在nginx.conf中找到的第一个 server作 默认server. (default_server:同上)
backlog=num 表示TCP中backlog队列的大小
rcvbuf=size 设置监听句柄的SO_RECVBUF参数
sndbuf=size 设置监听句柄的SO_SNDBUF参数
accept_filter 设置accept过滤器,支队FreeBSD有用
deferred 在设置参数后,若用户发起建立请求,并且完成了TCP的三次握手,内核也不会为这次连接调度worker进程来 处理,只有用户真的发送数据时(内核已经在网卡中收到请求包),内核才会唤醒worker进程处理这个请求
bind 绑定当前端口、地址对。只有同时对一个端口监听多个地址时才会生效
ssl 在当前监听的端口上建立的连接必须基于SSL协议

2.Nginx虚拟主机

类别 类别 类别
语法 server_name name […] server_names_hash_bucket_size size;
默认 server_name “”; server_names_hash_bucket_size 32
配置块 Server; http,server,locầtion
作用 实现虚拟主机的关键 为了快速找到相应的servername的能力,Nginx使用散列表来存储servername。这个设置了桶的大小

3.Nginx配置location

语法:location[=|*|^|@]/uri/{…}
配置块:server
详情:location会尝试根据用户请求中的uri来匹配上面的uri表达式,如果可以匹配,就选择location快中配置来处理用户请求。当然,匹配方式是多样的。

=/uri表示完全匹配
~/uri表示匹配URI时大小写敏感的。
~*uri表示匹配URI时忽略大小写
^~/uri表示匹配URI时只需要其前半部分匹配即可。
/uri不带任何修饰符,也表示前缀匹配,但是在正则匹配之后
/ 通用匹配,任何为匹配到其他location的请求夺回匹配到,相当于switch中的default

注意:location是有顺序的,如果一个请求有可能被多个location匹配,实际上这个请求会被第一个location处理

最后:location/{}会处理所有的请求。
在这里插入图片描述
在这里插入图片描述

4.Nginx常规配置

(1)定义环境变量

语法:evn VAR|VAR=VALUE
作用:用户可以直接设置操作系统上的环境变量
举例:evn TESTPATH=/tmp;

(2)嵌入其他配置文件

语法:include/path/file
作用:可以其他配置文件引入进来,路径可以是绝对路径也可以是相对路径,还可以是通配符*。
在这里插入图片描述

(3)pid文件

语法:pid path/file
默认:pid logs/nginx.pid
作用:保存master进程ID的pid文件存放路径。
在这里插入图片描述

(4)Nginx worker进程运行的用户和用户组

语法:user username [groupname];
默认:user nobody nobody;
作用:master进程fork出的进程在哪个用户和用户组下

(5)指定Nginx worker进程可以打开的最大句柄描述符个数

语法:worker_rlimit_nofile limit
作用:设置一个worker可以打开的最大句柄数。

(6)限制信号队列

语法:worker_rlimit_sigpending limit;
作用:设置每个用户发往Nginx的信号队列的大小。也就是说,当某个用户的信号队列满了,这个用户再发送的信号就会被丢掉。

5.Nginx高性能配置

(1)Nginx worker进程个数

语法:worker_proceses number
默认:worker_proceses 1
作用:在master_worker运行方式下,定义worker进程的个数。worker进程的数量会直接影响性能。每个worker都是单线程进程,它会调用各个模块来实现各个功能。如果确定这些模块不会出现阻塞式调用,那么进程数可以和CPU核心数一样;反之,则稍少一些。

(2)绑定Nginx worker进程到指定的CPU内核

语法:worker_cpu_affinity cpumask [cpumask…]
作用:假设每个worker都是繁忙的,如果多个进程都在抢同一个CPU,那么就会出现同步问题。反之,如果每个worker进程独享一个CPU,就实现了完全并发。
举例:
worker_proceses 4
worker_cpu_affinity 1000 0100 0010 0001
在这里插入图片描述

(3)SSL硬件加速

语法: ssl_engine device;
作用:如果服务器上有SSL硬件加速设备,那么就可以进行配置以加快SSL协议的处理速度。用户可以用OpenSSL提供的命令来查看是否有SSL硬件加速设备:openssl engine -t

(4)Nginxworker进程优先级设置

语法: worker_priority nice;
默认: worker_priority 0;
作用:在Linux和Unix中,当许多进程都处于可执行状态时,按照优先级来决定本次内核选择哪一个进程执行。进程分配的CPU时间片大小也与优先级有关,优先级越高,时间片越长(例如,在默认情况下,最小时间片是5ms,最大则有800ms)。优先级由静态优先级和内核根据进程的执行情况所做的动态调整(目前只有±5的调整)共同决定。nice是进程的优先级,它的取值范围是-20~+19,-20是最高优先级,+19是最低优先级。不建议把nice的值设为比内核进程(t通常为-5)还要小。

6.Nginx事件配置

(1)是否打开accept锁

语法: accept_mutex [on|off];
默认: accept_mutex on;
作用:accept_mutex是Nginx的负载均衡锁。这把锁可以让多个worker进程轮流的,序列化的与新的客户端建立TCP连接。accept锁默认是打开的,如果关闭它,那么建立TCP连接的耗时会更短,但不利于负载均衡,因此不建议关闭。

(2)使用accept锁后到真正建立连接之间的延迟时间

语法: accept_mutex_delay Nms;
默认: accept_mutex_delay 500ms;
作用:在使用accept锁后,同一时间只有一个worker进程能够取到accept锁。这个accept锁不是堵塞锁,如果取不到会立刻返回。如果只有一个worker进程试图取锁而没有取到,他至少要等待accept_mnutex_delay定义的时间才能再次试图取锁。

(3)批量建立新连接

语法:multi_accept[on|off];
默认: multi_accept off;
作用:当事件模型有新连接时,尽可能的对本次调度中客户端发起的所有TCP请求都建立连接。

(4)选择事件模型

语法: use [kqueue|rtsig|epoll|/dev/poll|select|poll|eventport];
默认:Nginx会选出最合适的时间模型
作用:对于Linux系统,可供选择的事件驱动模型有:pol,select,epoll三种,一般来说,epoll是性能最高的。

(5)每个worker的最大连接数

语法: worker_connections number;
作用:定义每个worker进程可以同时处理的最大连接数。

7.Nginx事件模型

epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。

优点:
支持一个进程打开大数目的socket描述符。
IO效率不随FD数目增加而线性下降。
使用mmap加速内核与用户空间的消息传递。
在这里插入图片描述

8.Nginx配置实例

user:进程运行的用户和用户组。
worker_connections:每个worker最大连接数。
pid:保存master进程ID的pid文件存放路径。
use: 选择事件模型。
upstream:配置负载均衡。
ip_hash:基于IP_HASH的负载均衡。
listen:监听端口。
server_name:配置虚拟主机名。
location:匹配用户请求。
proxy_pass:配置反向代理。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/a954553391/article/details/107603947