nginx高性能配置详解
程序员文章站
2024-02-16 10:54:28
...
nginx配置详解
#全局配置
#高层配置
user www-data#运行用户默认配置
pid /var/run/nginx.pid;#端口号默认配置
worker_processes 8;#定义了nginx对外提供web服务时的worker进程数
#最优值取决于许多因素,包括(但不限于)CPU核的数量、存储数据的硬盘数量及负载模式
#通常设置成和cpu的数量相等(设置为"auto"将尝试自动检测它)
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;#将8个进程分配到8个cpu,当然可以写多个,或者将一个进程分配到多个cpu
worker_rlimit_nofile 200000;#更改worker进程的最大打开文件数限制
#如果没设置的话,这个值为操作系统的限制
#设置后你的操作系统和Nginx可以处理比“ulimit -a”更多的文件,所以把这个值设高,这样nginx就不会有"too many open files"问题了
#假如填写10240,总并发量达到3-4万时就有进程可能超过10240了,这时会返回502错误
#这个指令是指当一个nginx 进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx 进程数相除,但是nginx 分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致
events {
worker_connections 102400; #设置可由一个worker进程同时打开的最大连接数
#如果设置了上面提到的worker_rlimit_nofile,我们可以将这个值设得很高。
#重点:最大客户数也由系统的可用socket连接数限制(~ 64K),所以设置不切实际的高没什么好处
#理论上每台nginx 服务器的最大连接数为worker_processes*worker_connections
multi_accept on; #告诉nginx收到一个新连接通知后接受尽可能多的连接
use epoll; #设置用于复用客户端线程的轮询方法
}
http {
server_tokens off; #并不会让nginx执行的速度更快,但它可以关闭在错误页面中的nginx版本数字,这样对于安全性是有好处的
sendfile on; #可以让sendfile()发挥作用
tcp_nopush on; #告诉nginx在一个数据包里发送所有头文件,而不一个接一个的发送
tcp_nodelay on; #告诉nginx不要缓存数据,而是一段一段的发送--当需要及时发送数据时,就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值
access_log off; #设置nginx是否将存储访问日志。关闭这个选项可以让读取磁盘IO操作更快(aka,YOLO)
error_log /var/log/nginx/error.log crit;#告诉nginx只能记录严重的错误
keepalive_timeout 10; #给客户端分配keep-alive链接超时时间。服务器将在这个超时时间过后关闭链接。我们将它设置低些可以让ngnix持续工作的时间更长
client_header_timeout 10; #设置请求头的超时时间。我们也可以把这个设置低些。
client_body_timeout 10; #设置请求体的超时时间。我们也可以把这个设置低些。
reset_timedout_connection on; #告诉nginx关闭不响应的客户端连接。这将会释放那个客户端所占有的内存空间。
send_timeout 10;#指定客户端的响应超时时间。这个设置不会用于整个转发器,而是在两次客户端读取操作之间。如果在这段时间内,客户端没有读取任何数据,nginx就会关闭连接
limit_conn_zone $binary_remote_addr z>
#全局配置
#高层配置
user www-data#运行用户默认配置
pid /var/run/nginx.pid;#端口号默认配置
worker_processes 8;#定义了nginx对外提供web服务时的worker进程数
#最优值取决于许多因素,包括(但不限于)CPU核的数量、存储数据的硬盘数量及负载模式
#通常设置成和cpu的数量相等(设置为"auto"将尝试自动检测它)
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;#将8个进程分配到8个cpu,当然可以写多个,或者将一个进程分配到多个cpu
worker_rlimit_nofile 200000;#更改worker进程的最大打开文件数限制
#如果没设置的话,这个值为操作系统的限制
#设置后你的操作系统和Nginx可以处理比“ulimit -a”更多的文件,所以把这个值设高,这样nginx就不会有"too many open files"问题了
#假如填写10240,总并发量达到3-4万时就有进程可能超过10240了,这时会返回502错误
#这个指令是指当一个nginx 进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx 进程数相除,但是nginx 分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致
events {
worker_connections 102400; #设置可由一个worker进程同时打开的最大连接数
#如果设置了上面提到的worker_rlimit_nofile,我们可以将这个值设得很高。
#重点:最大客户数也由系统的可用socket连接数限制(~ 64K),所以设置不切实际的高没什么好处
#理论上每台nginx 服务器的最大连接数为worker_processes*worker_connections
multi_accept on; #告诉nginx收到一个新连接通知后接受尽可能多的连接
use epoll; #设置用于复用客户端线程的轮询方法
}
http {
server_tokens off; #并不会让nginx执行的速度更快,但它可以关闭在错误页面中的nginx版本数字,这样对于安全性是有好处的
sendfile on; #可以让sendfile()发挥作用
tcp_nopush on; #告诉nginx在一个数据包里发送所有头文件,而不一个接一个的发送
tcp_nodelay on; #告诉nginx不要缓存数据,而是一段一段的发送--当需要及时发送数据时,就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值
access_log off; #设置nginx是否将存储访问日志。关闭这个选项可以让读取磁盘IO操作更快(aka,YOLO)
error_log /var/log/nginx/error.log crit;#告诉nginx只能记录严重的错误
keepalive_timeout 10; #给客户端分配keep-alive链接超时时间。服务器将在这个超时时间过后关闭链接。我们将它设置低些可以让ngnix持续工作的时间更长
client_header_timeout 10; #设置请求头的超时时间。我们也可以把这个设置低些。
client_body_timeout 10; #设置请求体的超时时间。我们也可以把这个设置低些。
reset_timedout_connection on; #告诉nginx关闭不响应的客户端连接。这将会释放那个客户端所占有的内存空间。
send_timeout 10;#指定客户端的响应超时时间。这个设置不会用于整个转发器,而是在两次客户端读取操作之间。如果在这段时间内,客户端没有读取任何数据,nginx就会关闭连接
limit_conn_zone $binary_remote_addr z>