Nginx配置参数说明
worker_processes
用于设置Nginx的 worker process进程的数量。正常情况下,一个Nginx会有一个 master process进程,由该进程按照该参数的设置来启动相应数量的work process进程。默认的值为auto,Nginx实例会自动启动与操作系统cpu数量相同的work process进程数。当nginx添加了SSL证书时,最好要打开多个worker进程。SSL握手会进行硬盘I/O操作。 所以打开多个worker进程有利于性能的提升。
worker_connections
这个参数在events模块中。它指定了一个worker进程在同一时间可以处理的最大请求数。默认值是1024;web服务器同时处理的请求数并不等于它同时服务的客户端数量。一个浏览器会打开多个并发连接来下载网页的各个部分,如图片、脚本等等。而且不同的浏览器对同一个网页打开的并发连接数量也会有所不同
worker_rlimit_nofile
由于每一个socket都会打开一个文件描述符,所以服务器可以同时处理连接数量受到系统文件描述符数量的限制。如果nginx打开的socket数量超过了文件描述符的数量,那么在error.log文件中会出现too many opened files错误。我们可以用下面的命令来查看文件描述符的数量:
$ ulimit -n
Nginx worker进程默认的用户名是www-data或nginx,用户www-data所拥有的文件描述符的数量要大于worker进程数量与worker_connections之乘积。一般可以设置为65535;
multi_accept
这个参数在events模块中。multi_accept可以让nginx worker进程尽可能多地接受请求。它的作用是让worker进程一次性地接受监听队列里的所有请求,然后处理。如果multi_accept的值设为off,那么worker进程必须一个一个地接受监听队列里的请求。默认multi_accept的值为off,如果web服务器面对的是一个持续的请求流,那么启用multi_accept可能会造成worker进程一次接受的请求大于worker_connections指定可以接受的请求数。这就是overflow,这个overflow会造成性能损失,overflow这部分的请求不会受到处理。
use
这个参数在events模块中。事件驱动模型,值为select|poll|kqueue|epoll|resig,一般默认为epoll,是 Nginx 支持的高性能事件驱动库之一。是公认的非 常优秀的事件驱动模型。
error_log
该参数用于启用并设置错误日志的保存位置和严重性级别,是调试Nginx服务的重要手段,可以在全局区、http
,server
或location
上下文(模块)中进行设置,日志级别包括debug
调试消息。info
信息性消息。notice
公告,warn
警告,error
处理请求时出错。crit
关键问题。需要立即采取行动。alert
-警报。必须立即采取行动。emerg
紧急情况。系统处于无法使用的状态。例如:error_log /var/log/nginx/domain.error.log warn;
access_log
每当处理客户请求时,Nginx都会在访问日志中生成一个新事件记录。每个事件记录都包含一个时间戳,并包含客户端和所请求资源的各种信息。访问日志可以显示访问者的位置,访问者的访问的页面等。log_format
指令允许您定义日志的格式。access_log
指令启用并设置日志文件的保存位置和使用的格式。可以在http
,server
或location
指令的上下文中启用访问日志。为获得更好的可维护性,建议为每个Nginx的虚拟主机设置一个单独的访问日志文件。在server
指令中设置的access_log
指令将覆盖在http
指令中设置的access_log
。默认情况下,Nginx主配置文件中的http
指令配置了全局访问日志格式。
Nginx缓冲区相关设置参数
proxy_max_temp_file_size、proxy_buffers等等,具体可以参考:https://www.cnblogs.com/xiewenming/p/8023090.html,如果相关参数设置不正确,会参数警告日志:“an upstream response is buffered to a temporary file”。
selinux的配置
setrlimit(RLIMIT_NOFILE, 65535) failed (1: Operation not permitted) 问题,是因为nginx的参数 worker_rlimit_nofile 65535,而操作系统的参数ulimit -n的值与之不同,但是因为selinux的安全机制,httpd进程无法修改该参数值,所以报错。
解决办法:执行 setsebool -P httpd_setrlimit 1 ,然后重启操作系统。
client_max_body_size
client_max_body_size 默认 1M,表示客户端发送给服务器的请求体所允许的最大尺寸,在“Content-Length”请求头中指定。如果请求的正文大于client_max_body_size的值,一定是失败的,HTTP协议会报错 413 Request Entity Too Large。如果需要上传大文件,一般需要修改该值。client_body_buffer_size
proxy_buffer_size
4k
或 8k
。这个缓冲区用于存储响应头(header),而响应体则存储在由 proxy_buffers
和 proxy_busy_buffers_size
指令定义的缓冲区中。proxy_buffer_size参数可以写在http
、server
或 location
块中,具体取决于想要应用这个设置的范围。http(全局范围)、server(服务器范围)、location(路径范围),如果在多个代码块定义,则优先级为location > server > http。proxy_buffers 和 proxy_busy_buffers_size
proxy_buffers
指定了缓冲区的数量和单个缓冲区的大小,而 proxy_busy_buffers_size
则定义了当Nginx开始发送响应到客户端之前,可以使用的“忙碌”缓冲区的大小,通常设置为 proxy_buffers
中单个缓冲区大小的倍数。proxy_buffers number size;
number
:缓冲区的数量。size
:每个缓冲区的大小。
proxy_max_temp_file_size 和 proxy_temp_path
这两个指令与代理响应体的大文件处理相关。当响应体的大小超过proxy_buffers
和 proxy_busy_buffers_size
所定义的缓冲区大小时,Nginx会将数据写入临时文件。proxy_max_temp_file_size
定义了临时文件的最大尺寸,而 proxy_temp_path
则指定了临时文件的存储路径。