2.2 Nginx配置的通用语法

Nginx的配置文件其实是一个普通的文本文件。下面来看一个简单的例子。


user nobody;

worker_processes 8;

error_log/var/log/nginx/error.log error;

pid logs/nginx.pid;

events{

use epoll;

worker_connections 50000;

}

http{

include mime.types;

default_type application/octet-stream;

log_format main'$remote_addr[$time_local]"$request"'

'$status$bytes_sent"$http_referer"'

'"$http_user_agent""$http_x_forwarded_for"';

access_log logs/access.log main buffer=32k;

……


在这段简短的配置代码中,每一行配置项的语法格式都将在2.2.2节介绍,出现的events和http块配置项将在2.2.1节介绍,以#符号开头的注释将在2.2.3节介绍,类似"buffer=32k"这样的配置项的单位将在2.2.4节介绍。

2.2.1 块配置项

块配置项由一个块配置项名和一对大括号组成。具体示例如下:


events{

……

}

http{

upstream backend{

server 127.0.0.1:8080;

}

gzip on;

server{

……

location/webstatic{

gzip off;

}

}

}


上面代码段中的events、http、server、location、upstream等都是块配置项,块配置项之后是否如"location/webstatic{……}"那样在后面加上参数,取决于解析这个块配置项的模块,不能一概而论,但块配置项一定会用大括号把一系列所属的配置项全包含进来,表示大括号内的配置项同时生效。所有的事件类配置都要在events块中,http、server等配置也遵循这个规定。

块配置项可以嵌套。内层块直接继承外层块,例如,上例中,server块里的任意配置都是基于http块里的已有配置的。当内外层块中的配置发生冲突时,究竟是以内层块还是外层块的配置为准,取决于解析这个配置项的模块,第4章将会介绍http块内配置项冲突的处理方法。例如,上例在http模块中已经打开了"gzip on;",但其下的location/webstatic又把gzip关闭了:gzip off;,最终,在/webstatic的处理模块中,gzip模块是按照gzip off来处理请求的。