Nginx配置通用语法
Nginx的配置文件只是一个普通的文本文件,这里借用《深入理解Nginx模块开发与架构解析》上的例子记录Nginx配置的通用语法。
user nobody; worker_processes 8; error_log varlog/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; ... }
块配置由一个块配置项名和一对大括号组成,如下:
events { ... } http { upstream backend { server 127.0.0.1:8080; } gzip on; server { ... location /webstatic { gzip off; } }
上述代码中的events、http、server、location、upstream等都是块配置项,块配置项后大括号中的就是这个配置项的配置。块配置项可以嵌套,内层的块配置会直接继承外层块的配置,如上述的server就继承了http的配置。但是当内层配置与外层配置冲突时,该块配置会采用哪种配置(这里不解释,在Nginx块内配置冲突一文中介绍)?
从上述中可以了解到,最基本的配置项语法格式就是配置项名+配置项值,配置项名与配置项值之间使用空格符来隔开,而且一个配置项可以对应多个值,最后在每一行配置的结尾都需要加上分号。
不管是代码还是配置中,注释都是不能少的一部分,而nginx配置文件中的行注释与python一样,使用“#”符号可以注释掉这一行内容,如下。
#pid logs/nginx.pid;
大部分的模块都遵从一些通用规定,如指定空间大小时不需要每次都定义到字节,指定时间是不需要到毫秒级。
当指定空间大小的时候,可以使用K、M为单位。
当指定时间时,可以使用ms、s、m、h、d、w、m、y为单位。如下:
gzip_buffers 4 8k; client_max_body_size 64M; expires 10y; proxy_read_timeout 600; client_body_timeout 2m;
Nginx中有一些模块容许在配置项中使用变量,比如在日志记录部分,我们可以在变量前添加“$”符号,代表该值是一个变量。不过要特别注意的是这种变量只是少数模块支持,并不是通用的。
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';