以下通过介绍常用模块来讲解Nginx配置文件指令(以下内容都是参照官方网站)

1、Nginx的主模块的常用配置指令:

(1)error_log

语法:error_log  file  [debug | info | notice | wran | error | crit ]

默认值:${prefix}/logs/error.log

指定Nginx服务(与FastCGI)错误日志文件位置。

每个字段的错误日志等级默认值:main字段:error     HTTP字段:crit       server字段:crit 

(2)include

语法:include  file |*

默认值:none

可以包含一些其他的配置文件来完成你想要的功能。

实例: include   conf.d/*.conf




2、Nginx的http核心模块的常用配置指令

(1)alias

语法:alias  file-path | directory-path

默认值:no

使用字段:location

这个指令就是将RUL映射成文件系统路径;具体的映射规则如下:

location   /i/  {

       alias   /spool/w3/p_w_picpaths/;

}

上例中,如果客户端请求"/i/top.gif“这个文件,返回的是:"/spool/w3/p_w_picpaths/top.gif"。

(2)listen

语法:listen  address:port  [default_server  [backlog=num  |rcvbuf=size |  sndbuf=size |  accept_filter=filter  |  deferred | bind  | ssl]]

默认值:listen  80

使用字段:server

listen指令指定了server {....}  字段中可以被访问到的ip地址及端口号,可以只指定一个ip,一个端口,或者一个可解析的服务器名。

(3)location

语法:location  【=|~|~*|^~|@】  /uri/  {......}

默认值:no

使用字段:server

这个参数根据不同的需求来进行配置,可以使用字符串与正则表达式匹配,如果要使用则正表达式,你必须指定下列前缀:~*不区分大小写、~区分大小写

各种查询方式的总结:

1、前缀"="表示精确匹配查询,如果找到,立即停止查询。

2、指令任然使用标准字符串,如果匹配使用"^~"前缀,停止查询

3、正则表达式按照他们配置文件中定义的顺序。

如果第三方产生一个匹配,这个匹配将被使用,否则将使用第二条的匹配。

实例:location = / {

#只匹配/的查询

【configuration  A】

}

Location   /   {

#匹配任何以 / 开头的查询,但是正则表达式与一些较长的字符串将被首先匹配

}

location ^~/p_w_picpaths/ {

#匹配任何以/p_w_picpaths/开始的查询并且停止搜索,不检查正则表达式

【configuration  C】

}

location  ~*  \.  (gif | jpg | jpeg $ {

#匹配任何以gif,jpg  or   jpeg结尾的文件,但是所有/p_w_picpaths/目录的请求将在Configuration C中处理

}

各请求的处理如下例:

/   请求的是       configuration  A 

/documents/document.html   请求的是   configuration B 

/p_w_picpaths/1.gif   请求的是    configuration C 

/documents/1.jpg  请求的是   configuration D 

(4)root

语法:root  path

默认值:root  html

使用字段:http,server,location,location中的if字段

设置请求达到后的文件根目录

下例中:

location   /i/  {

root   /spool/w3;

}

如果请求"/i/top.gif"文件,nginx将转到"/spool/w3/i/top.gif"文件。

(5)server

语法:server {.....}

默认值:no

使用字段:http

server字段包含虚拟主机的配置。没有明确的机制来分开基于域名(请求中的主机头)和基于IP的虚拟主机。可以通过listen指令来指定必须连接到这个server块的所有地址和端口,并且在server_name指令中可以指定所有的域名。

(6)server_name

语法:server_name   name  [.......]

默认值:server_name   hostname

使用字段:server


这个指令有两个作用:
·将HTTP请求的主机头与在nginx配置文件中的server{...}字段中指定的参数进行匹配,并且找出第一个匹配结果。这就是如何定义虚拟主机的方法,域名遵循下述优先级规则:
1、完整匹配的名称。
2、名称开始于一个文件通配符:*.example.com。
3、名称结束于一个文件通配符:www.example.*。
4、使用正则表达式的名称。
如果没有匹配的结果,nginx配置文件将安装以下优先级使用[#server server { ... }]字段:
1、listen指令被标记为default的server字段。
2、第一个出现listen(或者默认的listen 80)的server字段。
·如果server_name_in_redirect被设置,这个指令将用于设置HTTP重定向的服务器名。




3、Nginx的http访问控制模块的常用配置指令

(1)allow

语法:allow  【address  | CIDR | all 】

默认值:no

使用字段:http,server,location,limit_except

指令指定了允许访问的IP或网络断

(2)deny

语法:deny  【address | CIDR | all 】

默认值:no

使用字段:http,server,location,limit_except

指令指定了拒绝访问的IP或网络段。

例:

error_page  403  http://example.com/forbidden.html;

location  /  {

   deny   192.168.1.1;

   allow  192.168.1.0/24;

   allow   10.1.1.0/16;

   deny   all;

}




4、Nginx的http访问控制模块的常用配置指令

(1)auth_basic  

语法:auth_basic   【text|off】

默认值:auth_basic    off

使用字段:http,server,location,limit_except

指令包括一个具有测试用户名和密码的HTTP基本认证,指定的参数将用于认证域。如果将值设置为"off"则忽略下级继承的动作。

(2)auth_basic_user_file

语法:auth_basic_user_file    the_file

默认值:no

使用字段:http,server,location,limit_except

location   /  {

    auth_basic    "Restricted";

        auth_basic_user_file     conf/htpassed;

}




5、Nginx的http目录清单生成模块的常用配置指令

(1)autoindex

语法:autoindex   【on  | off】

默认值:autoindex   off

使用字段:http,server,location

是否使用自动目录列表





6、URL重写模块(Rewrite)的常用配置指令

(1)rewrite

语法:rewrite  regex  replacement  flag

默认值:none

使用字段:server,location,if

按照相关的正则表达式与字符串修改URI,指令按照在配置文件中出现的顺序执行。注意重写规则只匹配相对路径而不是绝对的URL,如果先匹配主机名,可以加一个if判断

例:

if  ($host  ~*  www\. (.*)){

    set   $host_without_www $1

    rewrite  ^(.*)$ http://$host_without_www$1  permanent ;# $1为"/foo",而不是"www.mydomain.com/foo"

}


可以在重写指令后面添加标记。
如果替换的字符串以http://开头,请求将被重定向,并且不再执行多余的rewrite指令。
标记可以是以下的值:

·last - 完成重写指令,之后搜索相应的URI或location。
·break - 完成重写指令。
·redirect - 返回302临时重定向,如果替换字段用http://开头则被使用。
·permanent - 返回301永久重定向。




7、SSL模块(SSL)常用配置指令
下面是一个SSL的示例配置,为了减少CPU负载,可以将其指到一个工作进程,并且启用keepalive

worker_processes 1;

http {

    server {

        listen        443;

        ssl             on;

        ssl_certificate             /usr/local/nginx/conf/cert.pem;

        ssl_certificate_key      /usr/local/nginx/conf/cert.key;

         keepalive_timeout     70;

    }

}

(1)ssl

语法:ssl   【on  | off 】

默认值:ssl    off

使用字段:mian ,server

开启HTTPS

(2)ssl_certificate

语法:ssl_certificate     file

默认值:ssl_certificate    cert.pem

使用字段:main,server

为这个虚拟主机指定PEM格式的证书文件

(3)ssl_certificate_key

语法:ssl_certificate_key  file

默认值:ssl_certificate_key  cert.pem

使用字段:main,server

为这个虚拟主机指定PEM格式的秘钥




配置文件大致讲解完毕(接下来是三种虚拟主机的配置)