Nginx配置文件结构
配置与调试Nginx(nginx.conf)
Nginx配置文件主要分成四部分:main(全局设置)、server(主机设置)、upstrea(负载均衡服务器设置)和location(URL匹配指定位置的设置)。main部分设置的指令将影响其他所有设置:server部分的指令主要用于指定主机和端口;upstream指令主要用于负载均衡,设置系列的后端服务器;location部分用于匹配网页位置。
这四者之间的关系:
server继承main,location继承server,upstream既不会继承其他设置也不会被继承。
1、 nginx的全局设置
Nginx的全局属性配置,代码如下:
user nobody nobody;指定Nginx Worker进程运行用户以及用户组,默认由nobody账号运行。
worker_processes 4;指定了Nginx要开启的进程数。每个Nginx进程平均消耗10M~12M内存。根据经验,一般指定一个进程足够了,如果是多核CPU,建议指定和Cpu的数量(核数)的进程数。
error_log logs/error.log notice;日志输出级别有debug、info、notice、warn、error、crit。
pid logs/niginx.pid;
worker_rlimit_nofile 65535 用于绑定worker进程与CPU;
events { 设定Nginx的工作模式及连接数上限。
use epoll;
worker_connections 65536;
}
use指定nginx的工作模式。nginx支持的工作模式有select,Poll、,kqueue,epoll,rtsig和/dev/poll。其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式。
worker_connections制定了Nginx每个进程的最大连接数,默认是1024,最大客户端连接数由worker_processes和worker_connections决定,及Max_client=worker_processes*worker_connections,在作为反向代理时,Max_clients变为:
max_clients = worker_processes * worker_connections/4;
进程的最大连接数受Linux系统进程的最大打开文件数限制,在执行操作系统命令“ulimit –n 65536”后worker_connections的设置才能生效。
2、 HTTP服务器配置
http {
include conf/mime.types;
default_type application/octet-stream;
log_format main ‘$remote_addr - $remote_user [$time_local]’
“’$request” $status.$bytes_sent ’
“’$http_referer” “$http_user_agent”’
“’$gzip_ratio”’;
log_format download ‘$remote_addr - $remote_user [$time_local]’
“’$request” $status $bytes_sent’
“’$http_referer” “http_user_agent”’
“’$http_range” “$sent_http_content_range”’;
client_max_body_size 20m;
client_header_buffer_size 32K;
large_client_header_buffers 4 32K;
Sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 60;
client_header_timeout 10;
client_body_timeout 10;
send_timeout 10;
}
详细介绍下这段代码中每个配置选项的含义。
include是main模块指令,实现对配置文件锁包含的文件的设定,可以减少主配置文件的复杂度。
default_type属于HTTP核心模块指令,这里设定默认类型为二进制流,也就是当文件类型未定义时使用这种方式,例如在没有配置PHP环境时,Nginx不予解析的,此时,用浏览器访问PHP文件就会出现下载窗口。
log_format对日志格式的设定.HTTPLog模块指令。main为此日志输出格式的名称,可以在下面的access_log指令中引用。
client_max_body_size用来指定来自客户端请求头的headerbuffer大小。对于大多数请求,1K的缓冲区大小已经足够,如果自定义了消息头或有更大的cookie,可以增加缓冲区大小。这里设置为32K。
large_client_header_buffers用来指定客户端请求中最大的消息头的缓冲最大数量和大小,“4”为个数,“128K”为大小,最大缓存量为4个128K。
sendfile参数用于开启高效文件传输模式。将tcp_nopush和tcp_nodelay两个指令设置为on用于防止网络堵塞。
keepalive_timeout设置客户端连接头读取超时时间。如果超过这个时间,服务器会关闭该连接。
client_header_timeout设置客户端请求头读取超时时间。如果超过这个时间,客户端还没有发送任何数据,Nginx将返回“Request time out(408)"错误。
client_body_timeout设置客户端请求主题读取超时时间。如果超过这个时间,客户端还
没有发送任何数据,Nginx将返回”Request time out(408)”错误,默认值是60.
send_timeout指定相应客户端的超时时间。这个超时仅限于两个连接活动之间的时间,
如果超过这个时间,客户端没有任何活动,Nginx将会关闭连接。
3、 HttpGzip模块配置
下面配置Nginx的HttpGzip模块。这个模块支持在线实时压缩输出数据流。要查看
否安装了此模块,需要使用下面的命令:(此结果中没有安装)
[root@localhost ~]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.6.2
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)
configure arguments: --prefix=/usr/local/nginx
通过nginx -V命令可以查看安装Nginx时的编译选项,由输出可知,我们未安装Http
Gzip模块。(查看如何更改)
HttpGzip模块在nginx配置中的相关属性设置:
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
gzip用于设置开启或者关闭gzip模块,“gzip on”表示开启GZIP压缩,实时压缩输出数据流。
gzip_min_length设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取。默认值是0,不管页面多大都进行压缩。建议设置成大于1K的字节数,小于1K可能会越压越大。
gzip_buffers表示申请4个单位为16K的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果。
gzip_http_version用于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器已经支持GZIP解压,使用默认即可。
gzip_comp_level用于指定GZIP压缩比,1压缩比最小,处理速度最快;9压缩比最大,传输速度快,但处理最慢,也比较消耗cpu资源。
gzip_types用来指定压缩的类型,无论是否指定,“text/html”类型总是会被压缩的。
gzip_vary选项可以让前端的缓存服务器缓存经过GZIP压缩的页面,例如用Squid缓存经过Nginx压缩的数据。
|