在Linux下每个软件都有自己的配置文件,这个文件通常是一个文本文件,每个软件的配置文件都包含特定的语法,比如PHP使用windows风格ini配置语法,sendmail使用M4处理器编译成配置文件,Nginx也有特定的语法,不过Nginx的语法非常简单

配置文件语法

#user nobody;  //#可以注释该行
worker_processes 1;

配置指令

在第二行中声明一个指令worker_processes,指令通常都是用分号;结束,每个指令都有唯一的作用,worker_processes指令声明worker进程的数量,user指令声明以某个用户启动Nginx、

使用include组织文件

inlcude是一个指令他可以帮助我们很好的组织配置文件,一般我们使用他来分离站点配置文件从主配置文件中
在nginx中一般会包含以下这些类型的配置文件

Standard name     Description
nginx.conf        Base configuration of the application.主配置文件
mime.types        A list of file extensions and their associated MIME types. 
fastcgi.conf      FastCGI-related configuration.FastCGI相关配置
proxy.conf        Proxy-related configuration.代理相关配置
sites.conf        Configuration of the websites served by Nginx, also known as virtual hosts. It's recommended to create separate files for each domain.虚拟主机配置

include指令支持通配符,也就是说可以这样包含配置文件

include conf/*.conf

使用nginx测试配置文件

nginx -t 

指令块

如果你激活一个模块,需要指定特定的指令才可用,某些指令可在不同的指令块中重用

events {
 worker_connections 1024;
}

比如你需要在location关闭日志

[…]
 location ^~ /admin/ {
 index index.php;
 access_log off;
 }
[…]

指令的特定语法

也许你会对以下语法感到非常困惑

rewrite ^/(.*)\.(png|jpg|gif)$ /image.php? file=$1&format=$2 last; 

在rewrite模块中允许使用高级的逻辑结构来声明指令,比如if, set, break, and return指令

指令的值

  • k or K: Kilobytes
  • m or M: Megabytes
client_max_body_size 2M; #两句是相等的
client_max_body_size 2048k;

时间单位

  • ms: Milliseconds
  • s: Seconds
  • m: Minutes
  • h: Hours
  • d: Days
  • w: Weeks
  • M: Months (30 days)
  • y: Years (365 days)

变量

模块也可以提供变量作为指令的值,比如http模块定义$nginx_version,可以在log_format指令中使用

[…]
location ^~ /admin/ {
 access_log logs/main.log;
 log_format main '$pid - $nginx_version - $remote_addr';
}
[…]
有些指令是不允许使用变量
error_log logs/error-$nginx_version.log; #不可用

字符串值

root /home/example.com/www;
root '/home/example.com/my web pages';

当遇到某些特殊的字符时需要使用双引号或者单单引号转义

Nginx基本模块

  • Core模块: 基本功能和指令,进程管理和安全
  • Events模块: 让您配置的Nginx网络的内部机制
  • Configuration模块: 开启包含机制,比如包含配置文件

Nginx进程结构

当启动Nginx时,主进(Main Processes)程会一直存在与内存中,并以当前用户权限启动,主进程(Main Processes)本身不会处理请求,它会衍生出很多work进程(Worker Processes)处理请求