在第一篇博文中,介绍了如何安装Nginx。这一篇文章介绍如何配置nginx来发挥它的最大作用。
安装完nginx之后,可以安装路径下找到一个conf目录,nginx.conf就是一个最简单的配置文件。
这个文件虽然简单,但是“麻雀虽小,五脏俱全“,那我们就从这里开始吧!
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
charset utf-8;
location / { # /表示根目录,该配置表示Nginx默认打开/www下的index.html
root C:\foo;
index index.html index.htm;
}
}
}
nginx的配置文件使用类似于json的格式来组织配置信息。
第一行
#user nobody
这个#表示一行注释,不会起作用。
第二行
worker_processes 1;
这是什么意思呢?
官网上的说法是这样的
worker_processes用来设置worker进程的个数。
那worker进程个数又是怎么回事?nginx启动时,一般会启动多个工作者进程(worker process),以达到最大的系统性能。但是启动work进程数量多少才合适呢?
官方文档是这样写的
Syntax: worker_processes number | auto;
Default: worker_processes 1;
Context: main
Defines the number of worker processes.
The optimal value depends on many factors including (but not limited to) the number of CPU cores, the number of hard disk drives that store data, and load pattern. When one is in doubt, setting it to the number of available CPU cores would be a good start (the value “auto
” will try to autodetect it).
The auto
parameter is supported starting from versions 1.3.8 and 1.2.5.
下面一大段话,这里简单翻译一下:
最优值取决于多个因素,包括(但不限于)CPU核的个数,存储数据的硬盘驱动器个数,加载模式。如果有疑问,将他设置为CPU内核个数就是一个好的开始(设置为auto的话,nginx自动检测当前系统CPU内核个数)。
在查看文档的时候,有另外一个收获,就是发现了2个新概念:Directive,Context.
worker_process就是一个directive,它所在的上下文(context)就是main。何为context,就是这个指令所在的容器。最大的context就是配置文件本身了,它的名字是main。
现在我们使用刚刚掌握的概念和方法,继续看下面的内容。
#error_log logs/error.log
这是一条被注释的指令error_log,查看http://nginx.org/en/docs/ngx_core_module.html,搜索error_log,可以找到如下内容
Syntax: error_log file [level];
Default:
error_log logs/error.log error;
Context: main, http, mail, stream, server, location
error_log用来配置日志。从Context的注释来看,error_log应用非常广泛,可以应用到main,http,mail,stream,server,location这些不同的上下文里面。
如果用在main这个级别,并且没有明确说明错误日志的文件,则使用默认的配置,文件名为logs/error.log,错误级别是error。
第一个参数是保存错误日志的文件。
第二个参数是错误级别。包括debug, info, notice, warn, error, crit, alert, 以及 emerg这几种不同的级别。
对error_log只介绍到这里。
下面一条指令是
#pid logs/nginx.pid;
仍然从http://nginx.org/en/docs/ngx_core_module.html中查找说明,搜索pid,找到如下内容:
Syntax: pid file;
Default:
pid logs/nginx.pid;
Context: main
它的作用是指定一个保存nginx主进程ID的文件。
下面一条指令是没有被注释的,说明它比较重要:
events {
worker_connections 1024;
}
从官网文档中找到如下关于events指令的说明
Syntax: events { ... }
Default: —
Context: main
events只是一个配置文件的上下文(context),可以在里面指定一些影响连接进程的指令(directive)。
所以events不能单独使用,还要向events的上下文中添加其它指令才有用。
接着查找
worker_connections
的相关文档:
Syntax: worker_connections number;
Default:
worker_connections 512;
Context: events
设置工作进程(worker process)能够同时打开的最大连接数。
必须记住,这个数目不仅包括客户端的数量,而且还包括所有连接数(例如和其它代理服务器的连接。)另外需要考虑的一点是,实际最大并发连接量不能超过当前允许打开文件个数。
#pid logs/nginx.pid;
查询官网,了解到pid指令的用途是指定保存nginx主进程ID的文件。
events {
worker_connections 1024;
}
这个稍微复杂一些。events提供了一个上下文,可以在其中使用与连接处理方式有关的指令,如worker_connections.
worker_connections设置在worker进程中的并发连接数。所谓并发连接数就是同时打开的连接的数量。并发连接不但包括客户端连接,还包括nginx与其它代理服务的连接。
http {
...
}
http是一个可以包含很多种指令的上下文,主要用来容纳http服务器相关的指令。
下面逐一分析其中的指令。
http {
include mime.types;
}
按照官网说法,include指令是可以放在任意的上下文中使用的,它的作用是向当前配置中引入一个文件,或者引入一个能够跟规则匹配的文件。这个规则或者文件就是include后面跟的参数。被包含文件必须是由语法正确的语句或块组成。
要了解mime.types是干啥的,可以参考这篇文章。