深入浅出Nginx之二【基本配置】

从这篇博客开始,将对Nginx的配置文件nginx.conf的常用配置做详细的解释,并且以附件的形式给出实际的配置文件内容。

Shell代码收藏代码

usernickexcelsoft;

说明:以root账号运行时,设置worker进程所属的用户/组。

Shell代码收藏代码

worker_processes2;

说明:设置worker进程的数目,一般和CPU内核数一致,可设置为其2倍,以优化性能。

其他:

查看CPU内核数:cat/proc/cpuinfo|grepprocessor

如果为双核,则显示:

processor:0

processor:1

Shell代码收藏代码

error_log/opt/nginx/logs/error.lognotice;

说明:指定错误日志的路径、级别,所有的级别包括debug、info、notice、warn、error、crit

Shell代码收藏代码

pid/opt/nginx/logs/nginx.pid;

说明:指定nginx启动时的进程文件。

其他:

1.nginx启动时,获取该文件的写权限,将当前进程(masterprocess)的pid写入到nginx.pid文件。

2.一旦nginx启动,该文件即成为可读的,无法再次写入,可以避免nginx的重复启动。

3.nginx.pid的文件内容是当前进程的pid,因此可以这样关闭:

kill`cat/opt/nginx/logs/nginx.pid`

不需要查看nginx的进程号:ps-ef|grepnginx

Shell代码收藏代码

worker_rlimit_nofile65535;

说明:设置一个nginx进程能够打开的最大文件数。

其他:

1.默认情况下,nginx进程能够打开的文件数受限于当前的操作系统。

2.查看系统的最大文件数:当前的CentOS为1024。

ulimit-a

ulimit-n

Shell代码收藏代码

events{

useepoll;

worker_connections65535;

说明:

1.设置网络IO模型:

epoll:在Linux内核2.6以上版本可用,查看Linux版本:cat/proc/version

和标准的select模式比较,处理时间更短,采用了类似于数据库的索引机制,以空间换时间.

kqueue:适用于FreeBSD系统。

2.worker_connections:单个worker进程允许的最大并发连接数。

理论上,每台nginx服务器的最大连接数为worker_processes*worker_connections,

但是nginx进行调度时,分配用户请求给worker进程并不均匀,无法达到最大值。

Shell代码收藏代码

charsetutf-8;

说明:http作用域,设置编码格式,可不统一设置。

Shell代码收藏代码

log_formataccess'$remote_addr-$remote_user[$time_local]"$request"'

'$status$body_bytes_sent"$http_referer"'

'"$http_user_agent""$http_x_forwarded_for"'

'"$sent_http_content_type""$request_time"';

说明:http作用域.

1.该日志格式定义为access名称。

2.日志格式:原有选项

$remote_addr:客户端IP地址,如果使用nginx进行了反向代理,获取的是nginx服务器的地址。

$remote_user:客户端用户名。

$time_local:客户端进行访问时的本地时间。[21/Jun/2014:23:35:19+0800]

$request:请求方式、路径、协议。[GET/html/HTTP/1.1]

$status:请求状态码,成功为200。

$body_bytes_sent:发送给客户端的文件主体大小。[49]

$http_referer:记录从哪个页面链接过来的。

$http_user_agent:客户端浏览器。

$http_x_forwarded_for:使用反向代理后,真实的客户端IP地址。

3.日志格式:追加选项

$sent_http_content_type:响应的内容类型。[text/html;charset=utf-8]

$request_time:处理用户请求的时间,包括接收请求、返回响应的时间。[0.000]

Shell代码收藏代码

access_log/opt/nginx/logs/access.logaccess;

说明:http作用域,指定日志文件的位置。

Shell代码收藏代码

sendfileon;

说明:http作用域,是否开启linux系统的零拷贝(zerocopy)功能,针对普通的应用设为on。

针对下载(或者大量图片显示)等涉及大量磁盘IO的操作设为off,可以有效减少数据拷贝。

Shell代码收藏代码

tcp_nopushon;

说明:http作用域,默认为off,将小的数据包组装发送,避免大量数据包导致的网络拥塞。

Shell代码收藏代码

tcp_nodelayon;

说明:http作用域,设置响应无延迟,默认为on.高版本的Linux系统允许和tcp_nopush同时使用。

Shell代码收藏代码

keepalive_timeout65;

说明:http作用域,设置连接超时时间为65s

1.如果有大量图片显示、大文件上传等,设置地调整为一个较大值。

2.不能设置的太大,避免恶意的连接占用。

Shell代码收藏代码

gzipon;

说明:http作用域,开启gzip压缩功能。

1.在服务端对响应内容进行压缩,客户端的浏览器具有gzip解压缩能力。

2.压缩比率高达30%以上,有效节省传输带宽。

Shell代码收藏代码

gzip_min_length1k;

说明:页面内容大于1k时才进行压缩,避免内容过少导致的越压越大现象。

Shell代码收藏代码

gzip_buffers832k;

说明:压缩时需要的缓冲区大小,避免大文件的丢失.一共8块、每块32k。

Shell代码收藏代码

gzip_http_version1.1;

说明:默认为HTTP/1.1协议,早期的浏览器可能不支持gzip功能。

Shell代码收藏代码

gzip_comp_level3;

说明:设置压缩比率,范围为1-9,不宜设置的过大、以避免影响了CPU的性能。

Shell代码收藏代码

gzip_typestext/plaintext/csstext/javascriptapplication/x-javascriptapplication/xml;

说明:进行压缩的文件类型

1.gzip默认会对text/html进行压缩,因此不用指定。

2.关于js:传统的标准类型为text/javascript,但js终究不是纯文本文件,

推荐使用application/javascript,但事实上,application/javascript并没有很好的支持,

实际使用application/x-javascript,x前缀表示experimental。

Shell代码收藏代码

gzip_varyon;

说明:根据http响应头判断浏览器是否支持gzip压缩,不支持即不压缩。

使用火狐查看:

响应头:Vary:Accept-Encoding

请求头:Accept-Encodinggzip,deflate

Shell代码收藏代码

server_names_hash_bucket_size128;

说明:后端服务器名字的哈希存储大小,如果服务器很多,可以适当调大一点。

Shell代码收藏代码

client_header_buffer_size32k;

说明:说明:nginx默认使用该大小的buffer来读取header值。

Shell代码收藏代码

large_client_header_buffers432k;

说明:如果header过大,使用该buffer来读取header。

Shell代码收藏代码

client_max_body_size100m;

说明:客户端能够上传的最大文件大小。

Shell代码收藏代码

client_body_buffer_size128k;

说明:处理客户端请求(通过POST发送的数据、文件上传)的buffer大小,

如果超过此大小限制,则全部或部分存储到一个临时文件。

启动、关闭:su-root

检查配置文件是否修改正确:

Shell代码收藏代码

/usr/local/nginx/sbin/nginx-t

平滑启动:

Shell代码收藏代码

kill-HUP`cat/opt/nginx/logs/nginx.pid`

相关推荐