nginx如何配置参数以及变量

 更新时间:2024年01月11日 15:42:14   作者:拿命搏未〃来  
这篇文章主要介绍了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含义相同

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

最新评论