http {
...
... #各server的公共配置
server { #每个server用于定义一个虚拟主机
...
}
server {
...
server_name #虚拟主机名
root #主目录
alias #路径别名
location [OPERATOR] URL { 指定URL的特性
...
if CONDITION {
...
}
}
}
}
模块的功能
模拟反代基于tcp或udp的服务连接,即工作于传输层的反代或调度器。
server { ... }
配置一个虚拟主机
server {
listen address[:PORT]|PORT;
server_name SERVER_NAME;
root /PATH/TO/DOCUMENT_ROOT;
}
1、listen PORT|address[:port]|unix:/PATH/TO/SOCKET_FILElisten address[:port] [default_server] [ssl] [http2 | spdy] [backlog=number] [rcvbuf=size] [sndbuf=size]
default_server #设定为默认虚拟主机
ssl #限制仅能够通过ssl连接提供服务
backlog=number #超过并发连接数后,新请求进入后援队列的长度
rcvbuf=size #接收缓冲区大小
sndbuf=size #发送缓冲区大小
注意:
(1) 基于port;
listen PORT; 指令监听在不同的端口
(2) 基于ip的虚拟主机
listen IP:PORT; IP 地址不同
(3) 基于host
nameserver_name fqdn; 指令指向不同的主机名
(4) default_server
不加这个的话默认页面是/etc/nginx/conf.d 文件下排序的第一个配置文件为主
2、server_name name ...;
虚拟主机的主机名称后可跟多个由空白字符分隔的字符串
支持*通配任意长度的任意字符
server_name *.a.com www.a.*
支持~起始的字符做正则表达式模式匹配,性能原因慎用
server_name ~^www\d+\.a\.com$
\d 表示[0-9]
匹配优先级机制从高到低:
(1) 首先是字符串精确匹配 如:www.a.com
(2) 左侧*通配符 如:*.a.com
(3) 右侧*通配符 如:www.a.*
(4) 正则表达式 如:~^.*\.a\.com$
(5) default_server
3、tcp_nodelay on | off;
在keepalived模式下的连接是否启用TCP_NODELAY选项
当为off时,延迟发送,合并多个请求后再发送
默认On时,不延迟发送
可用位置:http, server, location
4、sendfile on | off;
是否启用sendfile功能,在内核中封装报文直接发送默认Off
可用位置:http, server, location, if in location
5、server_tokens on | off | build | string
是否在响应报文的Server首部显示nginx版本
可用位置:http, server, location
示例1:虚拟主机
server{
listen 80;
server_name www.a.com;
root /data/web1/;
} #1、以server_name 定义虚拟主机
server{
listen 192.168.109.143:98
root /data/web2/;
} #2、以ip加端口定义虚拟主机
定义路径相关的配置
6、root
设置web资源的路径映射;用于指明请求的URL所对应的文档的目录路径
可用位置:http, server, location, if in location
server {
...
root /data/www/vhost1;
}
示例:
http://www.a.com/images/logo.jpg
--> /data/www/vhosts/images/logo.jpg
7、location [ = | ~ | ~* | ^~ ] uri{ ... }
location @name { ... }
在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射;ngnix会根据用户请求的URI来检查定义的所有location,并找出一个最佳匹配,而后应用其配置
可用位置:server, location
示例:
server {...
server_name www.a.com;
location /images/ {
root /data/imgs/;
}
}
http://www.a.com/images/logo.jpg
--> /data/imgs/images/logo.jpg #访问这个图片真实路径
=:对URI做精确匹配;
location = / {
...
}
http://www.a.com/ 匹配
http://www.a.com/index.html 不匹配
^~:对URI的最左边部分做匹配检查,不区分字符大小写
~:对URI做正则表达式模式匹配,区分字符大小写
~*:对URI做正则表达式模式匹配,不区分字符大小写
不带符号:匹配起始于此uri的所有的uri
匹配优先级从高到低:=, ^~, ~/~*, 不带符号
location = / {
[ configuration A ]
}
location / {
[ configuration B ]
}
location /documents/ {
[ configuration C ]
}
location ^~ /images/ {
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
[ configuration E ]
}
示例:
root /vhosts/www/htdocs/
http://www.a.com/index.html
--> /vhosts/www/htdocs/index.html
server {
root /vhosts/www/htdocs/
location /admin/ {
root /webapps/app1/data/
}
}
http://www.a.com/admin/index.html
--> /webapps/app1/data/admin/index.html
8、alias path;
路径别名,文档映射的另一种机制
仅能用于location上下文
示例:
访问: http://www.a.com/bbs/index.php
location /bbs/ {
alias /web/forum/;
} --> 真实路径 /web/forum/index.html
location /bbs/ {
root /web/forum/;
} --> 真实路径 /web/forum/bbs/index.html
注意:location中使用root指令和alias指令的意义不同
(a) root, 给定的路径对应于location中的/uri/左侧的/
(b) alias,给定的路径对应于location中的/uri/右侧的/
9、error_page code ... [=[response]] uri;
模块:ngx_http_core_module
定义错误页,以指定的响应状态码进行响应
可用位置:http, server, location, if in location
error_page 404 /404.html
error_page 404 =200 /404.html
示例:
server{
listen 80;
server_name www.b.com;
error_page 404 /404.html; #页面是404错误换成默认页面
location /404.html {
root /data/error_html/;#默认页面是/data/error_html/404.html页面
}
root /data/web2;
}
server{
listen 80;
server_name www.b.com;
error_page 404 =200 /404.html; #=200意思是请求的页面状态码不会出现404 把404 变成200
location /404.html {
root /data/error_html/;
}
root /data/web2;
}
10、try_files file ... uri;
try_files file ... =code;
可用位置:server, location
按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有的文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部URI的指向。最后一个参数是回退URI且必须存在,否则会出现内部500错误
location /images/ {
try_files $uri /images/default.gif; #找不到图片 默认图片代替
}
location / {
try_files $uri $uri/index.html $uri.html =404;
}
定义客户端请求的相关配置
11、keepalive_timeout timeout [header_timeout];
设定保持连接超时时长,0表示禁止长连接,默认为75s
可用位置:http, server, location
12、keepalive_requests number;
在一次长连接上所允许请求的资源的最大数量 默认为100
可用位置:http, server, location
13、keepalive_disable none | browser ...
对哪种浏览器禁用长连接
可用位置:http, server, location
14、send_timeout time;
向客户端发送响应报文的超时时长,此处是指两次写操作之间的间隔时长,而非整个响应过程的传输时长.如果客户端在这段时间内没有收到任何东西,连接将被关闭
可用位置:http, server, location
15、client_body_buffer_size size;
用于接收每个客户端请求报文的body部分的缓冲区大小;默认为16k;超出此大小时,其将被暂存到磁盘上的由client_body_temp_path指令所定义的位置
可用位置:http, server, location
16、client_body_temp_path path [level1 [level2 [level3]]];
设定用于存储客户端请求报文的body部分的临时存储路径及子目录结构和数量
可用位置:http, server, location
目录名为16进制的数字;
client_body_temp_path /var/tmp/client_body 1 2 2
1 1级目录占1位16进制,即2^4=16个目录0-f
2 2级目录占2位16进制,即2^8=256个目录00-ff
2 3级目录占2位16进制,即2^8=256个目录00-ff
对客户端进行限制的相关配置
17、limit_rate rate;
限制响应给客户端的传输速率,单位是bytes/second 默认值0表示无限制
可用位置:http, server, location, if in location
18、limit_except method ... { ... },仅用于location
限制客户端使用除了指定的请求方法之外的其它方法
method:GET, HEAD, POST, PUT, DELETE MKCOL, COPY, MOVE, OPTIONS, PROPFIND,PROPPATCH, LOCK, UNLOCK, PATCH
limit_except GET {
allow 192.168.1.0/24;
deny all;
} 除了GET和HEAD之外其它方法仅允许192.168.1.0/24网段主机使用
文件操作优化的配置
19、aio on | off | threads[=pool];
是否启用aio功能 该指令出现在0.8.11版本中。
可用位置:http, server, location
20、directio size | off;
是否同步(直接)写磁盘,而非写缓存,在Linux主机启用O_DIRECT标记,则文件大于等于给定大小时使用,例如:directio 4m 大于4M直接写磁盘
可用位置:http, server, location
21、open_file_cache off;
open_file_cachemax=N [inactive=time];
可用位置:http, server, location
nginx可以缓存以下三种信息:
(1) 文件元数据:文件的描述符、文件大小和最近一次的修改时间
(2) 打开的目录结构
(3) 没有找到的或者没有权限访问的文件的相关信息
max=N:可缓存的缓存项上限;达到上限后会使用LRU算法实现管理
LRU算法参考:http://blog.csdn.net/xiao_mrs_li/article/details/69257694
inactive=time:缓存项的非活动时长,在此处指定的时长内未被命中的或命中的次数少于open_file_cache_min_uses指令所指定的次数的缓存项即为非活动项,将被删除
22、open_file_cache_errors on | off;
是否缓存查找时发生错误的文件一类的信息默认值为off
可用位置:http, server, location
23、open_file_cache_min_uses number;
open_file_cache指令的inactive参数指定的时长内,至少被命中此处指定的次数方可被归类为活动项 默认值为1
可用位置:http, server, location
24、open_file_cache_validtime;
缓存项有效性的检查频率默认值为60s
可用位置:http, server, location
这里只写了几个ngx_http_core_module
模块参数更多请参考官网 地址链接