nginx如何配置参数以及变量
作者:拿命搏未〃来
配置详解
1.daemon
:是否以守护进程的方式运行nginx
- daemon on | off ,默认值为on;
2.master_process
:是否以master/worker方式工作
- master_process on | off ,默认值为on;
- 在大多数情况下nginx还是以master进程管理多个worker进程的方式运行的,关闭了master_process之后nginx将以master进程来处理请求
3.error_log
:日志的设置; 格式: /path/file level, 默认值为error_log logs/error.log error;
- /path/file参数为一个具体的文件。
- level的值可为:debug,info,notice,warn,error,crit,alert,emerg。
- level的级别从左往右级别依次增大,当设定一个级别时,大于或等于改级别的日志都会被输出到path/file文件中,小于该级别的日志则不会输出。
4.env
:定义环境变量
- env VAR | VAR=VALUE
- 这项配置能够让用户直接设置操作系统上的环境变量。
5.include
:嵌入其他配置文件
- include配置能够将其他配置文件嵌入到当前的nginx.conf中,他的参数可以是绝对路径,也可以是相对路径(相对路径主目录为nginx.conf所在目录)。
6.pid
:配置pid文件的路径( path/file)
- pid文件保存着master进程id。该文件会直接影响nginx的服务运行。
7.user
:nginx worker进程运行的用户及用户组
- user username [groupname],默认值为nobody;
- user用于配置master进程启动后,fork出的worker进程运行在哪个用户和用户组下。
8.worker_rlimit_nofile
:指定nginx进程可以打开的最大文件个数。
- worker_rlimit_nofile limit;
9.worker_process
:nginx的worker进程数,默认值1;
- 在master/worker运行的方式下,定义worker进程的个数。
- worker进程的数量直接影响性能。
- worker进程的配置与我们的实际业务需求有关,每个worker进程都是单线程的进程,他们会调用各个模块以实现多种多样的功能。
- 如果能够确定这些模块不会出现阻塞的调用,那么有多少CPU内核就应该配置多少个进程;反之,如果可能出现阻塞式调用,那么需要配置稍多一些的worker进程。
- 多个worker进程能够充分利用多核系统架构,但若worker进程的数量多于CPU内核数,那么会增大进程间的切换带来的消耗。
10.worker_cpu_affinity
:绑定nginx worker进程到指定的cpu内核。
worker_cpu_affinity cpumask; worker_process 4; #开启4个进程 #2核cpu,开启4个进程 worker_cpu_affinity 01 10 01 10; #4核cpu,开启4个进程 worker_cpu_affinity 1000 0100 0010 0001;
- 为什么一定需要绑定CPU内核?
- 假设每个worker进程都是非常繁忙的,如果多个worker进程都在抢同一个CPU,那么这就会出现同步问题。
- 反之如果每个进程都是独享一个CPU,就在内核调度策略上实现了完全的并发。
11.ssl_engine device
:硬件加速
- 如果服务器上有ssl硬件加速设备,那么就可以进行配置以加快ssl协议的处理速度,可以通过OpenSSLengine
- -t命令查看是否具备ssl硬件加速设备
12.worker_priority
: nginx进程的优先级设置(指明worker进程的nice值)
- worker_priority nice;默认值为0;
13.accept_mutex
:是否打开accept锁
- accept_mutex on | off,默认值为on;
- accept_mutex是nginx的负载均衡锁,accept_mutex这把锁可以让多个worker进程轮流的,序列化的与新的客户端建立tcp连接。
- 当某一个worker进程建立的连接数量达到worker_connections配置的最大连接数的7/8时,会大大地减小这个worker进程试图建立新tcp连接的机会,以此实现所有worker进程之上处理的客户端请求数量接近。
14.lock_file
:lock文件的路径
- lock_file path/file,默认值:lock_file logs/nginx.lock;
- accept锁需要这个文件,如果accept锁关闭,lock_file配置完全不生效。
15.accept_mutex_delay
- 使用accept锁后到真正建立连接之间的延迟时间,默认:accept_mutex_delay 500ms;
在使用accept锁后,同一时间只有一个worker进程能够取到accept锁。
这个accept锁不是阻塞锁,如果取不到会立刻返回。
如果有一个worker进程试图取accept锁而没有取到,它至少要等accept_mutex_delay定义的时间间隔后才能再次试图取锁。
16.multi_accept
: 批量建立新连接
- multi_accept[on]off],默认: multi_accept off,
- 当事件模型通知有新连接时,尽可能地对本次调度中客户端发起的所有TCP请求都建立连接。
17.use
: 选择事件模型
- use[ kqueue]rtsiglepoll/dev/pollselectpollleventport];默认:Nginx会自动使用最适合的事件模型。
- 对于Linux操作系统来说,可供选择的事件驱动模型有poll、select、epoll三种。
- epoll当然是性能最高的一种,epoll可以处理大并发连接。
18.worker_connections
:每个worker的最大连接数
- worker_connections number;
- 定义每个worker进程可以同时处理的最大连接数。
19.全局变量
- $args 变量中存放了请求URL中的请求指令。比如
- http:/www.xxxx.com/index/index?argl=valuel&arg2=value2中的“argl=valuel&arg2=value2”
如下所示
$content_length
变量中存放了请求头中的Content-length字段$content_type
变量中存放了请求头中的Content-type字段$document_root
变量中存放了针对当前请求的根路径$document_uri
变量中存放了请求中的当前URI,并且不包括请求指令,比如 http://www.xxxx.com/index/index?argl-value1&arg2-value2中的“/index/index$host
变量中存放了请求URL中的主机部分字段、比如http://www.xxxx.com/index中的"“www.xxxx.com”。如果请求中 的主机部分字段不可用或者为空,则存放Nginx配置中该server块中server_name
指令的配置值$http_user_agent
变量中存放客户端的代理信息$http_cookie
变量中存放客户端的cookie信息$limit_rate
变量中存放Nginx服务器对网络连接速率的限制,也就是Nginx 配置中 limit_rate指令的配置值$remote_addr
变量中存放了客户端的地址$remote_port
变量中存放了客户端与服务器建立连接的端口号$remote_user
变量中存放了客户端的用户名$request_body_file
变量中存放了发给后端服务器的本地文件资源的名称$request_method
变量中存放了客户端的请求方式,如""GET”、“POST等$request_filename
变量中存放了当前请求的资源文件的路径名$request_uri
变量中存放了当前请求的URI,并且带请求指令$query_string
与变量Sargs含义相同$scheme
变量中存放了客户端请求使用的协议,比如“http”、“https”和“ftp”等$server_protocol
变量中存放了客户端请求协议的版本,比如“HTTP1.0”、"HTTP/1.1”等$server_addr
变量中存放了服务器的地址$server_name
变量中存放了客户端请求到达的服务器的名称$server _port
变量中存放了客户端请求到达的服务器的端口号uri
与变量uri与变量uri与变量document_uri含义相同
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。