nginx性能优化--conf参数说明及优化

平时nginx部署项目,安装完成,然后到/etc/nginx/nginx.conf文件中配置好server,或者在conf.d中创建一个.conf文件进行配置,就可以实现基本功能,但是对nginx内原始参数基本很少修改,如果想进一步提升nginx性能,则需要对参数有基本的认识,并且了解参数设置值的由来,下面就简单介绍一下conf文件中的参数配置

顶层配置

user www-data;
worker_processes 4;
pid /run/nginx.pid;
worker_rlimit_nofile 35535;     # 进程的文件描述符数量

user和pid是nginx默认配置,不进行修改

worker_processes 定义了nginx对外提供web服务时的worker进程数。设置为cpu核数最佳,有两种方式优化,1、参数设置为“auto”,它会自动检测cpu内核数;2、命令查询物理机核数,命令如下:
查看物理机cpu核数

cat /proc/cpuinfo | grep 'physical id' | sort|uniq|wc -l  # 查看物理机有几个CPU
cat /proc/cpuinfo | grep 'cpu cores'|uniq    # 查看cup核数

查看nginx占用的线程

ps -eo pid,args,psr | grep [n]ginx

worker_rlimit_nofile 更改worker进程的最大打开文件数限制。如果没设置的话,这个值为操作系统的限制。设置后你的操作系统和Nginx可以处理比“ulimit -a”更多的文件,所以把这个值设高,这样nginx就不会有“too many open files”问题了。

Events配置

events {
        worker_connections 768;                      每个worker打开的文件数量限制
        multi_accept on;                                    收到i一个新连接时接受尽可能多的连接
        use epoll; 
}

worker_connections 设置可由一个worker进程同时打开的最大连接数。

multi_accept 当收到新的连接时会尽可能多的接受连接。

use 设置用于复用客户端线程的轮询方法。worker对多个连接时采取的一种轮询方式。

HTTP配置

http中均为一些基础配置,默认配置基本就可以满足用户的需求,这里简单写一下配置的作用

http {

	##
	# Basic Settings
	##
	server_tokens off;                                # 关联错误页面中的nginx信息
	sendfile on;                                          # 
	tcp_nopush on;                                   #单个数据包中包好整个头部信息
	tcp_nodelay on;         # 
	keepalive_timeout 65;
	types_hash_max_size 2048;
	# server_tokens off;

	# server_names_hash_bucket_size 64;
	# server_name_in_redirect off;

	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	##
	# Logging Settings
	##

	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;

	##
	# Gzip Settings
	##

	gzip on;
	gzip_disable "msie6";

	# gzip_vary on;
	# gzip_proxied any;
	# gzip_comp_level 6;
	# gzip_buffers 16 8k;
	# gzip_http_version 1.1;
	# gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

	##
	# nginx-naxsi config
	##
	# Uncomment it if you installed nginx-naxsi
	##

	#include /etc/nginx/naxsi_core.rules;

	##
	# nginx-passenger config
	##
	# Uncomment it if you installed nginx-passenger
	##
	
	#passenger_root /usr;
	#passenger_ruby /usr/bin/ruby;

	##
	# Virtual Host Configs
	##

	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;
}

sendfile on 可以让sendfile()发挥作用。sendfile()可以在磁盘和TCP socket之间互相拷贝数据(或任意两个文件描述符)。拷贝过程在内存中完成。注意,.gzip压缩器需要在用户态进行,因此无法和sendfile共存,如果gizp设置为on,那么sendfile就会失去作用

sendfile_max_chunk 1M 限制最大sendfile的文件大小,防止过大的文件占据整个工作进程

tcp_nopush on 返回数据的首个数据包会携带从sendfile中获取大块的数据后才会被发送,这样可以防止网络拥塞问题。

tcp_nodelay 告诉nginx不要缓存数据,而是一段一段的发送–当需要及时发送数据时,就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值。

keepalive_timeout 给客户端分配keep-alive链接超时时间。服务器将在这个超时时间过后关闭链接。我们将它设置低些可以让ngnix持续工作的时间更长。

gzip on,开启压缩

gzip_types 指定需要压缩的文件类型,默认为text/html

gzip_min_length 需要进行压缩的最小文件大小(单位字节),例子中大小为512字节以上的才会进行压缩,对返回数据进行压缩是比较耗cpu的,如果cpu使用率本身就很高,可以使用gzip_comp_level调节压缩等级

你可能感兴趣的:(运维,nginx)