Nginx——Ngine X,是一款自由的、开源的、高性能HTTP服务器和反向代理服务器;也是一个IMAP、POP3、SMTP代理服务器;也就是说Nginx本身就可以托管网站(类似于Tomcat一样),进行Http服务处理,也可以作为反向代理服务器使用。
Nginx 解决了服务器的C10K(就是在一秒之内连接客户端的数目为10k即1万)问题。它的设计不像传统的服务器那样使用线程处理请求,而是一个更加高级的机制—事件驱动机制,是一种异步事件驱动结构.
nginx优点:
*基于异步IO模型(epoll,kqueue),性能强,能够支持上万并发
*对小文件支持很好,性能很高
*代码优美,扩展库必须编译进主程序
*消耗系统资源比较低
1.隐藏nginx版本号:
在nginx.conf的http标签里添加server_tokens off;
context(环境或位置):http server location
2.更改nginx的默认用户及用户组nobody
为了安全起见,需要更改nginx的默认用户及用户组nobody
方法一:在nginx主配置文件中设置user nginx nginx
context main
方法二:编译时指定用户
./configure --user=nginx --group=nginx
3.调整nginx子进程数,取决于许多因素,一般与cpu核数相等
worker_processes 2;
context main
4.优化cpu资源分配给不同的nginx进程,
通过worker_cpu_affinity参数设置,一般此参数的值和worker_processes相等比较好,但也由诸多因素所影响
四核cpu服务器;worker_cpu_affinity 0001 0010 0100 1000
八核cpu服务器;worker_cpu_affinity 0001 0010 0100 1000 0001 0010 0100 1000
work_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000
context main
5.调整nginx事件处理模型
nginx的连接处理机制在于不同的操作系统采用不同的I/O模型,在linux使用epoll
的IO多路复用模型,在freebsd使用kqueue的IO多路复用模型,在solaris使用
/dev/poll方式的IO多路服用模型等
配置参数
events
{
use epoll;
}
use是个事件模型指令,用来指定nginx的工作模式。nginx支持的工作模式有
select,poll,kqueue,epoll等等。其中select和poll都是标准的工作模式,不同的
是epoll用于linux平台上,而kqueue用来BSD系统中。对于linux系统linux2.6的内核,
推荐选择epoll模式,这个高性能高并发的设置。
context:events
一般不需要明确指定事件模型,nginx会自动选择最有效的工作模式
6.每个进程最大连接数
worker_connections 4096;
context events
7.配置每个进程最大文件打开数:
worker_rlimit_nofile 65535
context:main
配合Linux系统文件描述符(用户级限制)使用
[root@www nginx]# ulimit -n
65535
可参考资料http://blog.csdn.net/kumu_linux/article/details/78777708.
8.设置连接超时时间
keeplive_timeout 60
设置客户端连接保持会话的超时时间,超过这个时间,服务器会关闭这个连接
tcp_nodelay on
打开tcp_nodelay,在包含了keeplive参数才有效
client_header_timeout 15
设置客户端请求头读取超时时间。如果超过这个时间,客户端还没有发送任何
数据,nginx将返回"Request timeout(408)错误"
client_body_timeout 15
设置客户端请求主体读取超时时间。如超过这个时间,客户端还没有发送任何数据,
nginx将返回“Request timeout(408)错误”,默认是60
send_timeout 15;
响应客户端的超时时间。这个超时仅限于两个连接活动之间的时间,超过这个时间,客户端没有任何活动,
nginx将会关闭这个连接
context http server location
9.上传文件大小限制
client_max_body_size 10m;
context http server location
10.fastcgi调优(配合PHP引擎动态服务)
fastcgi_connect_timeout 300;
指定连接到后端FastCGI的超时时间
fastcgi_send_timeout 300;
向FastCGI 传送请求的超时时间,这个值是指已经完成两次握手后向FastCGI传送请求的超时时间
fastcgi_read_timeout 300;
指定接收FastCGI应答的超时时间,这个值是指完成两次握手后向FastCGI应答的超时时间
fastcgi_buffer_size 64k;
指定读取FastCGI应答第一部分需要用多大的缓冲区,这个值表示将使用1个64kb的缓冲区读取应答的
第一部分,可以设置为fastcgi_buffers选项指定的缓冲区大小。
fastcgi_buffers 4 64k;
指定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答请求
context http server location