以下通过介绍常用模块来讲解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格式的秘钥