基本语法: 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协议 |
类别 | 类别 | 类别 |
---|---|---|
语法 | 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。这个设置了桶的大小。 |
语法:location[=|*|^|@]/uri/{…}
配置块:server
详情:location会尝试根据用户请求中的uri来匹配上面的uri表达式,如果可以匹配,就选择location快中配置来处理用户请求。当然,匹配方式是多样的。
=/uri表示完全匹配
~/uri表示匹配URI时大小写敏感的。
~*uri表示匹配URI时忽略大小写
^~/uri表示匹配URI时只需要其前半部分匹配即可。
/uri不带任何修饰符,也表示前缀匹配,但是在正则匹配之后。
/ 通用匹配,任何为匹配到其他location的请求夺回匹配到,相当于switch中的default
注意:location是有顺序的,如果一个请求有可能被多个location匹配,实际上这个请求会被第一个location处理。
语法:evn VAR|VAR=VALUE
作用:用户可以直接设置操作系统上的环境变量
举例:evn TESTPATH=/tmp
;
语法:include/path/file
作用:可以其他配置文件引入进来,路径可以是绝对路径也可以是相对路径,还可以是通配符*。
语法:pid path/file
默认:pid logs/nginx.pid
作用:保存master进程ID的pid文件存放路径。
语法:user username [groupname];
默认:user nobody nobody;
作用:master进程fork出的进程在哪个用户和用户组下
语法:worker_rlimit_nofile limit
作用:设置一个worker可以打开的最大句柄数。
语法:worker_rlimit_sigpending limit;
作用:设置每个用户发往Nginx的信号队列的大小。也就是说,当某个用户的信号队列满了,这个用户再发送的信号就会被丢掉。
语法:worker_proceses number
默认:worker_proceses 1
作用:在master_worker运行方式下,定义worker进程的个数。worker进程的数量会直接影响性能。每个worker都是单线程进程,它会调用各个模块来实现各个功能。如果确定这些模块不会出现阻塞式调用,那么进程数可以和CPU核心数一样;反之,则稍少一些。
语法:worker_cpu_affinity cpumask [cpumask…]
作用:假设每个worker都是繁忙的,如果多个进程都在抢同一个CPU,那么就会出现同步问题。反之,如果每个worker进程独享一个CPU,就实现了完全并发。
举例:
worker_proceses 4
worker_cpu_affinity 1000 0100 0010 0001
语法: ssl_engine device;
作用:如果服务器上有SSL硬件加速设备,那么就可以进行配置以加快SSL协议的处理速度。用户可以用OpenSSL提供的命令来查看是否有SSL硬件加速设备:openssl engine -t
语法: worker_priority nice;
默认: worker_priority 0;
作用:在Linux和Unix中,当许多进程都处于可执行状态时,按照优先级来决定本次内核选择哪一个进程执行。进程分配的CPU时间片大小也与优先级有关,优先级越高,时间片越长(例如,在默认情况下,最小时间片是5ms,最大则有800ms)。优先级由静态优先级和内核根据进程的执行情况所做的动态调整(目前只有±5的调整)共同决定。nice是进程的优先级,它的取值范围是-20~+19,-20是最高优先级,+19是最低优先级。不建议把nice的值设为比内核进程(t通常为-5)还要小。
语法: accept_mutex [on|off];
默认: accept_mutex on;
作用:accept_mutex是Nginx的负载均衡锁。这把锁可以让多个worker进程轮流的,序列化的与新的客户端建立TCP连接。accept锁默认是打开的,如果关闭它,那么建立TCP连接的耗时会更短,但不利于负载均衡,因此不建议关闭。
语法: accept_mutex_delay Nms;
默认: accept_mutex_delay 500ms;
作用:在使用accept锁后,同一时间只有一个worker进程能够取到accept锁。这个accept锁不是堵塞锁,如果取不到会立刻返回。如果只有一个worker进程试图取锁而没有取到,他至少要等待accept_mnutex_delay定义的时间才能再次试图取锁。
语法:multi_accept[on|off];
默认: multi_accept off;
作用:当事件模型有新连接时,尽可能的对本次调度中客户端发起的所有TCP请求都建立连接。
语法: use [kqueue|rtsig|epoll|/dev/poll|select|poll|eventport];
默认:Nginx会选出最合适的时间模型
作用:对于Linux系统,可供选择的事件驱动模型有:pol,select,epoll三种,一般来说,epoll是性能最高的。
语法: worker_connections number;
作用:定义每个worker进程可以同时处理的最大连接数。
epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。
优点:
支持一个进程打开大数目的socket描述符。
IO效率不随FD数目增加而线性下降。
使用mmap加速内核与用户空间的消息传递。
user:进程运行的用户和用户组。
worker_connections:每个worker最大连接数。
pid:保存master进程ID的pid文件存放路径。
use: 选择事件模型。
upstream:配置负载均衡。
ip_hash:基于IP_HASH的负载均衡。
listen:监听端口。
server_name:配置虚拟主机名。
location:匹配用户请求。
proxy_pass:配置反向代理。