Nginx(4)-nginx配置文件详解-http配置段

http配置段详解:

http core 配置一个静态web服务器

使用的模块:

ngx_http_core_module

一个http的配置框架:

http {
upstream {
……后端服务器
}
server {
linsten  ip:port;#监听端口
#虚拟主机
location  /URL {
if …{
……
}
root "/path/to/somewhere";  #网站目录
……
认证
} 
}
server {
……
}
}


注意:

所有http相关配置必须位于http,server,location,upstream,if块中

在对应server块中有listen;


配置Nginx为web服务器使用:


一.虚拟主机配置:

1.定义一个虚拟主机

server {

}


2.指明监听端口,配置很复杂哦!

listen

常用格式:

listen address[:port] [default_server] ssl

完整格式:

listen address[:port] [default_server] [ssl] [spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];


backlog=number:指明tcp协议的backlog队列的大小,默认为-1,表示不设置

后援队列

rcvbuf=size:设定监听句柄的SO_RCVBUF参数的值,接收缓冲大小

sndbuf=size:发送缓冲大小

对一个端口监听多个地址生效

实例:listen  172.16.31.30:8080;



3.服务器名称,对应http中的主机名

server_name name[…];

后可跟多个主机名,名称可以使用通配符和正则表达式;以~开头

判断流程:

(1).先做精确匹配;例如:www.stu31.com

(2).左侧通配符匹配;例如:*.stu31.com

(3).右侧通配符匹配;例如:www.*

(4).正则表达式匹配;例如:~^.*\.stu31\.com$

(5).最后由listen中的default_server响应



4.允许根据用户请求的URI来匹配定义的各location,匹配到时,此请求将被相应的location块中的配置所处理;

location [=|~|~*|^~]/uri{……}
location @name

~      #波浪线表示执行一个正则匹配,区分大小写

~*     #表示执行一个正则匹配,不区分大小写

^~     #^~表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录

=      #进行普通字符精确匹配

@      #"@" 定义一个命名的 location,使用在内部定向时,例如 error_page, try_files

实例:

server {
location /images {}
location /bbs {}
location / {}
}


匹配优先级:

= 精确匹配会第一个被处理。如果发现精确匹配,nginx停止搜索其他匹配。

普通字符匹配,正则表达式规则和长的块规则将被优先和查询匹配,也就是说如果该项匹配还需去看有没有正则表达式匹配和更长的匹配。

^~ 则只匹配该规则,nginx停止搜索其他匹配,否则nginx会继续处理其他location指令。

最后匹配理带有"~"和"~*"的指令,如果找到相应的匹配,则nginx停止搜索其他匹配;当没有正则表达式或者没有正则表达式被匹配的情况下,那么匹配程度最高的逐字匹配指令会被使用。

location  = / {
  # 只匹配"/".
  [ configuration A ] 
}
location  / {
  # 匹配任何请求,因为所有请求都是以"/"开始
  # 但是更长字符匹配或者正则表达式匹配会优先匹配
  [ configuration B ] 
}
location ^~ /images/ {
  # 匹配任何以 /images/ 开始的请求,并停止匹配 其它location
  [ configuration C ] 
}
location ~* \.(gif|jpg|jpeg)$ {
  # 匹配以 gif, jpg, or jpeg结尾的请求. 
  # 但是所有 /images/ 目录的请求将由 [Configuration C]处理.   
  [ configuration D ] 
}


请求URI例子:

/ -> 符合configuration A
/documents/document.html -> 符合configuration B
/images/1.gif -> 符合configuration C
/documents/1.jpg ->符合 configuration D


@location 例子

error_page 404 = @error;
location @error(
proxy_pass http://error;
)


5.设置web资源路径映射:用于指明请求的URL所对应的文档的目录路径

root path

实例:若按照这种配置的话,则访问/images/目录下的文件时,nginx会去/www/pictures/images/文件目录下找文件。

location /images {
root "/www/pictures";
}



6.用于location配置段,定义路径别名

alias path

例如:若按照下面配置的话,则访问/images/目录里面的文件时,ningx会自动去/www/pictures/文件目录下找文件

location /images {
alias  /www/pictures/;
}


注意:

1).alias是一个目录别名的定义,root则是最上层目录的定义。

2).root是指的是 /www/pictures/images/ 

3).alias后面必须要用“/”结束,否则会找不到文件的;而root则可有可无.



7.默认主页面

index file

如:index  index.html


8.自定义错误页面

error_page  code  […] [=code] URI|@name

根据http状态码重定向错误页面


=code:也可以自定义状态码,以指定响应码进行响应;

= :后不加状态码,以新请求资源的响应结果来作为响应码

name:是另外一个location定义的名称,可能是交由后端的代理服务器请求


例如:

error_page  404 /404.html

重定向:

相对路径:对于root定义的根目录下

绝对路径:可以使用重定向到其他服务器的主页


9.一个请求由多个页面来响应

try_files  path1[,path2,……] URI

如果多个页面都没响应就重定向至最后一个URI路径中


二.网络连接相关配置:

1.保持连接的超时时长,默认为75s;

keepalive_timeout  time;


2.在一次保持连接上允许承载的最大资源请求数;

keepalive_requests  #;


3.为指定类型的浏览器禁用保持连接

keepalive_disable [msie6|safari|none]


4.tcp延迟发送,会带来体验下降;对长连接是否使用TCP_NODELAY选项;

tcp_nodelay  on|off


5.读取http请求报文首部的超时时长;

client_header_timeout  time;


6.读取http请求报文body部分的超时时长;网速慢的用户上传慢

client_body_timeout  time;


7.发送响应报文的超时时长;

send_timeout  time;


三.对客户端请求进行限制:

1.对客户端请求限制方法;

指定对范围之外的其他方法的访问控制

limit_except  METHOD  {……}

如:对指定范围外使用GET请求的除了允许172.16.0.0/16网段的主机使用,其他都拒绝。

limit_except  GET {
allow  172.16.0.0/16;
deny all;
}


2.限制请求报文中body报文的上限多大;通过检测请求报文中的“Content_Length"来判定;

client_body_max_size  SIZE;


3.限制客户端每秒钟传输的字节数,默认为0 ,表示无限制;

limit_rate  speed;



四.对内存或磁盘资源进行分配:

1.http请求报文的body部分是否存储在磁盘文件中;on和clean都表示允许,on表示请求结束后报文body部分暂存内容不会被删除,clean表示请求结束后报文body部分会被删除;off表示关闭此功能(不允许暂存)

client_body_in_file_only  on|clean|off;


2.请求报文的body部分是否能存储在内核内存的buffer中;默认为关闭的

允许会提高性能

client_body_in_single_buffer  on|off


3.在内存中开辟多大空间暂存请求报文body部分

client_body_buffer_size  SIZE;


4.请求报文body暂存路径,可以指定多级目录

client_body_temp_path DIR [level1[level2[level3[level4]]]]

例如:

client_body_temp_path  /var/tmp/nginx/client    1     2


5.接收请求报文header部分分配的内存中缓存的大小;

client_header_buffer_size  SIZE;


五.MIME类型相关的配置:

1.定义MIME types到文件的扩展名

types {}

例如:

types {
test/html  .html
image/jpeg  .jpg
}


2.指明默认MIME类型;

default_type  MIME-TYPE



六.文件操作优化相关配置:

1.是否启用sendfile()进行网络传输;

来看一下用 sendfile()来进行网络传输的过程:

sendfile(socket,file, len);

硬盘 >> kernel buffer (快速拷贝到kernelsocket buffer) >>协议栈

1、 系统调用sendfile()通过 DMA把硬盘数据拷贝到 kernel buffer,然后数据被 kernel直接拷贝到另外一个与 socket相关的 kernel buffer。这里没有 user mode和 kernel mode之间的切换,在 kernel中直接完成了从一个 buffer到另一个 buffer的拷贝。

2、DMA 把数据从 kernelbuffer 直接拷贝给协议栈,没有切换,也不需要数据从 user mode 拷贝到 kernel mode,因为数据就在 kernel 里。

步骤减少了,切换减少了,拷贝减少了,自然性能就提升了。

sendfile  on|off

sendfile64   on |off


2.是否启用内核级别异步IO

aio  on|off


3.是否启用直接IO

是否使用O-DIRECT选项去请求读取文件;缓冲区大小,快速直接写入读取磁盘,与sendfile互斥;尽量关闭;

directio  size|off;


4.nginx可以缓存以下三种信息:

(1).文件句柄,文件大小和最近一次修改时间;

(2).打开目录的目录结构;

(3).没用找到的或者没有权限操作的文件的相关信息;

open_file_cache  max=N[inactive=time] |off;

max表示缓存条目的最大条目上限,一旦到达上限,则会使用LRU(最近最少使用)从缓存中删除最近最少使用的条目;

inactive=time:在inactive指定时长内没有被访问的缓存条目就会淘汰;

5.是否缓存在文件缓存中缓存打开文件时出现找不到路径,没有权限等的错误信息;

open_file_cache_errors  on|off


6.每隔多长时间检查一次缓存中缓存条目的有效性;默认为60秒;

openFile_cache_min_users time;


你可能感兴趣的:(root,listen,http主配置段)