浏览 3.3k
基本语法:listen address:port
默认:listen 80;
作用:listen参数决定Nginx服务器如何监听端口。在listen后可以加IP地址,端口和主机名,非常灵活
例如:
listen 127.0.0.1:8000;
listen 127.0.0.1; # 默认80端口
listen 8000; # listen *:8000; # listen locahost:8000
这样就可以配置多个server,监听不同的端口
扩展语法:listen address:port [default(deprecated in 0.8.21)|default_server|[backlog=num|rcvbuf=size|sndbuf=size|accept_filter=filter|defered|bind|ipv6only=[on|off]|ssl]]
参数 | 意义 |
---|---|
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有用 |
defered | 在设置参数后,若用户发起建立请求,并且完成了TCP三次握手,内核也不会为这次连接调度worker进程来处理,只有用户真的发送数据时(内核已经在网卡中收到请求包),内核才会唤醒worker进程处理这个请求 |
bind | 绑定当前端口、地址对。只有同时对一个端口监听多个地址时才会生效 |
ssl | 在当前监听的端口上建立的连接必须基于SSL协议 |
类别 | 主机名 | server_names_hash_bucket_size |
---|---|---|
语法 | server_name name […] | server_names_hash_bucket_size size; |
默认 | server_name “”; | server_names_hash_bucket_size 32 |
配置块 | server; | http,server,location |
作用 | 实现虚拟主机的关键 | 为了快速找到相应的server name的能力,Nginx使用散列表来存储server name。这个设置了桶的大小。 |
worker_processes auto;
events {
use epoll;
worker_connections 65535;
}
http {
upstream aidan.org{
server 127.0.0.1:8881;
server 127.0.0.1:8882;
server 127.0.0.1:8883;
}
server {
listen 80;
server_name aidan.org;
location / {
proxy_pass http://aidan.org;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
语法:location [=|~*|@]/uri/{…}
配置块:server
详情:location会尝试根据用户请求中的uri来匹配上面的uri表达式,如果可以匹配,就选择location块中的配置来处理用户请求。当然匹配方式是多样的。
定义环境变量
语法:evn VAR|VAR=VALUE
作用:用户可以直接设置操作系统上的环境变量
举例:evn TESTPATH=/tmp;
嵌入其他配置文件
语法:include /path/file;
作用:可以把其他配置文件引入进来,路径可以使用绝对路径也可以是相对路径。还可以含有通配符*。
pid文件
语法:pid path/file;
默认:pid logs/nginx.pid;
作用:保存master进程ID的pid文件存放路径。
Nginx Worker进程运行的用户和用户组
语法:user username [groupname];
默认:user nobody nobody;
作用:master进程fork出的进程在哪个用户和用户组下。
指定Nginx Worker进程可以打开的最大句柄描述符个数
语法:worker_rlimit_nofile limit;
作用:设置一个worker可以打开的最大句柄数。
限制信号队列
语法:worker_rlimit_sigpending limit;
作用:设置每个用户发往Nginx的信号队列的大小。也就是说,当某个用户的信号队列满了,这个用户再发送的信号量就会被丢掉。
Nginx Worker进程个数
语法:worker_processes number;
默认:worker_processes 1;
作用:在master_worker运行方法下,定义worker进程的个数。worker进程的数量会直接影响性能。每个worker都是单线程的进程,他会调用各个模块来实现各种功能。如果确定这些模块不会出现堵塞式调用,那么进程数可以和CPU核心数一样;反之,则稍少一些。
绑定Nginx Worker进程到指定的CPU内核
语法:worker_cpu_affinity cpumask [cpumask…]
作用:假设每个worker都是很繁忙的,如果多个进程都在抢同一个CPU,那么就会出现同步问题。反之,如果每个worker进程独享一个CPU,就实现了完全的并发。
举例:
worker_processes 4;
worker_cpu_affinity 1000 0100 0010 0001;
SSL硬件加速
语法:ssl_engine device;
作用:如果服务器上有SSL硬件加速设备,那么就可以进行配置以加快SSL协议的处理速度。用户可以用OpenSSL提供的命令查看是否有SSL硬件加速设备:
$ openssl engine -t
(dynamic) Dynamic engine loading support
[ unavailable ]
Nginx Worker进程优先级设置
语法:worker_priority nice;
默认:worker_priority 0;
作用:在Linux和Unix中,当许多进程都处于可执行状态时,按照优先级来决定本次内核选择哪一个进程执行。进程分配的CPU时间片大小也与优先级有关,优先级越高,时间片越长(例如,在默认情况下,最小时间片是5ms,最大则有800ms)。优先级由静态优先级和内核根据进程的执行情况所做的动态调整(目前只有±5的调整)共同决定。nice是进程的优先级,他的取值范围是-20~+19,-20是最高优先级,+19是最低优先级。不建议把nice的值设为比内核进程(通常为-5)还要小。
# apt install -y apache2-utils
$ yum install -y httpd-tools
$ ab -n 20000 -k http://aidan.org/a/a
是否打开accept锁
语法:accept_mutex [on|off];
默认:accept_mutex on;
作用:accept_mutex是Nginx的负载均衡锁。这把锁可以让多个worker进程轮流的,序列化的与新的客户端建立TCP连接。
accept锁默认是打开的,如果关闭它,那么建立TCP连接的耗时会更短,但不利于负载均衡,因此不建议关闭。
使用accept锁后到真正建立连接之间的延迟时间
语法:accept_mutex_delay Nms;
默认:accept_mutex_delay 500ms;
作用:在使用accept锁后,同一时间只有一个worker进程能够取到accept锁,这个accept锁不是堵塞锁,如果取不到会立刻返回。如果只有一个worker进程试图取锁而没有取到,他至少要等待accept_mutex_delay定义的时间才能再次试图取锁。
批量建立新连接
语法:multi_accept [on|off];
默认:multi_accept off;
作用:当事件模型有新连接时,尽可能的对本次调度中客户端发起的所有TCP请求都建立连接。
选择事件模型
语法:use [kqueue|rtsig|epoll|/dev/poll|select|poll|eventport];
默认:Nginx会选出最合适的事件模型
作用:对于Linux系统,可供选择的事件驱动模型有:poll,select,epoll三种,一般来说,epoll是性能最高的。
每个worker的最大连接数
语法:worker_connections number;
作用:定义每个worker进程可以同时处理的最大连接数。
epoll是Linux内核为处理大批量文件描述符而作的改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。
优点:
worker_processes auto;
events {
use epoll;
worker_connections 65535;
}
http {
upstream aidan.org{
server 127.0.0.1:8881;
server 127.0.0.1:8882;
server 127.0.0.1:8883;
}
server {
listen 80;
server_name aidan.org;
location / {
proxy_pass http://aidan.org;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
按点赞数排序
按时间排序