2、http核心模块(ngx_http_core_module)
http
Syntax: http { ... }
Default: —
Context: main
提供配置文件上下文,其里面指定HTTP服务器指令
server
Syntax: server { ... }
Default: —
Context: http
配置虚拟主机。基于IP的和基于域名的虚拟主机没有明显的分隔。listen指令描述了接收连接的所有地址和端口,server_name指令列出了所有的域名。
listen
Syntax: listen address[:port] [default_server] [ssl] [http2 | spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
listen port [default_server] [ssl] [http2 | spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
listen unix:path [default_server] [ssl] [http2 | spdy] [proxy_protocol] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
Default: listen *:80 | *:8000;
Context: server
设置IP的地址和端口,或服务器将接受请求的Unix域套接字的路径,例如:
listen 127.0.0.1:8000;
listen 127.0.0.1;
listen 8000;
listen *:8000;
listen localhost:8000;
listen [::]:8000;
listen [::1];
listen unix:/var/run/nginx.sock;
server_name
Syntax: server_name name ...;
Default: server_name "";
Context: server
设置虚拟服务器的名字。例如:
server {
server_name example.com www.example.com;
}
#服务器名称可以包括星号(“*”)来替换名称的第一部分或最后一部分:
server {
server_name example.com *.example.com www.example.*;
}
#支持~起始的字符做正则表达式模式匹配,性能原因慎用
server {
server_name www.example.com ~^www\d+\.example\.com$; #\d表示[0### 9]
}
匹配优先级机制从高到低:
- 首先是字符串精确匹配 如:www.shengzhe.com
- 左侧通配符 如: *.shengzhe.com
- 右侧通配符 如: www.shengzhe.*
- 正则表达式 如: ~^.*.shengzhe.com$
- default_server
root
Syntax: root path;
Default: root html;
Context: http, server, location, if in location
设置请求的根目录,例如:
location /i/ {
root /data/w3;
}
# /data/w3/i/top.gif文件将响应“/i/top.gif”请求而发送
# 路径值可以包含变量,除了$document_root和$realpath_root。
alias
Syntax: alias path;
Default: —
Context: location
定义指定的location的一个替换
location /i/ {
alias /data/w3/images/;
}
#对于“/i/top.gif”的请求,将发送文件/data/w3/images/top.gif。
#路径值可以包含变量,除了$document_root和$realpath_root
#alias 后面必须要用 “/” 结束,否则会找不到文件
#如果alias配置在正则匹配的location内,则正则表达式中必须包含捕获语句(也就是括号()),
#而且alias配置中也要引用这些捕获值。如:
location ~ ^/users/(.+\.(?:gif|jpe?g|png))$ {
alias /data/w3/images/$1;
}
location
Syntax: location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
Default: —
Context: server, location
根据请求的URI设置配置。
在一个server中location配置段可存在多个,用于实现URI到文件系统的路径映射;
匹配字符串分为两种:普通字符串(literal string)和正则表达式(regular expression),其中 ~ 和 ~* 用于正则表达式, 其他前缀和无任何前缀都用于普通字符串。
匹配顺序是:
- 先匹配普通字符串,将最精确的匹配暂时存储;
- 然后按照配置文件中的声明顺序进行正则表达式匹配,只要匹配到一条正则表达式,则停止匹配,取正则表达式为匹配结果;
- 如果所有正则表达式都匹配不上,则取1中存储的结果;
- 如果普通字符串和正则表达式都匹配不上,则报404 NOT FOUND
- “^~ ”和“= ”都能阻止继续搜索正则location。不同点是“^~ ”依然遵守“最大前缀”匹配规则,然而“= ”不是“最大前缀”,而是必须是严格匹配
- 只要遇到“精确匹配exact match ”,即使普通location 没有带“= ”或“^~ ”前缀,也一样会终止后面的匹配。例如:
location = /uri =开头表示精确前缀匹配,只有完全匹配才能生效。
location ^~ /uri ^~开头表示普通字符串匹配上以后不再进行正则匹配。
location ~ pattern ~开头表示区分大小写的正则匹配。
location ~* pattern ~*开头表示不区分大小写的正则匹配。
location /uri 不带任何修饰符,表示前缀匹配。
location / 通用匹配,任何未匹配到其他location的请求都会匹配到。
配置举例:
location = / {
[ configuration A ]
}
location / {
[ configuration B ]
}
location /documents/ {
[ configuration C ]
}
location ^~ /images/ {
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
[ configuration E ]
}
#“/” 请求匹配configuration A;
#“/index.html”请求匹配configuration B;
#“/documents/document.html”请求匹配configuration C;
#“/images/1.gif”请求匹配configuration D;
#“/documents/1.jpg”请求匹配configuration E。
#注意:正则匹配会根据匹配顺序,找到第一个匹配的正则表达式后将停止搜索。
#普通字符串匹配则无视顺序,只会选择最精确的匹配。
tcp_nodelay
Syntax: tcp_nodelay on | off;
Default: tcp_nodelay on;
Context: http, server, location
当连接转换为保持活动(keep### alive)状态时,启用该选项。此外,它在SSL连接、无缓冲代理和WebSocket代理上也要启用。
tcp_nopush
Syntax: tcp_nopush on | off;
Default: tcp_nopush off;
Context: http, server, location
启用或禁FreeBSD上的tcp_nopush socket选项或Linux上的tcp_cork socket选项。只有在使用sendfile时才启用这些选项。
senfile
Syntax: sendfile on | off;
Default: sendfile off;
Context: http, server, location, if in location
启用或禁用sendfile()的使用。从nginx 0.8.12和FreeBSD 5.2.1开始,aio可用于预加载sendfile()的数据。
不开启sendfile():
硬盘 >> kernel buffer >> user buffer>> kernel socket buffer >>协议栈
开启sendfile():
硬盘 >> kernel buffer (快速拷贝到kernelsocket buffer) >>协议栈
当 Nginx是一个静态文件服务器的时候,开启sendfile配置项能大大提高Nginx的性能。
例如:
location /video/ {
sendfile on;
tcp_nopush on;
aio on;
}
server_tokens
Syntax: server_tokens on | off | build | string;
Default: server_tokens on;
Context: http, server, location
在错误页和“服务器”响应头字段中启用或禁用发出nginx版本。
error_page
Syntax: error_page code ... [=[response]] uri;
Default: —
Context: http, server, location, if in location
定义为指定错误显示的URI。URI值可以包含变量。
例如:
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
#这将导致内部重定向到指定的URI,客户端请求方法更改为“GET”(对于除“GET”和“HEAD”之外的所有方法)。
#此外,可以使用“=response”语法将响应代码更改为其他代码,例如:
error_page 404 =200 /empty.gif;
keepalive_timeout
Syntax: keepalive_timeout timeout [header_timeout];
Default: keepalive_timeout 75s;
Context: http, server, location
设定客户端保持连接超时时长, 0表示禁止。Mozilla和Konqueror可以识别,MSIE自己会在60s后关闭连接。
keepalive_requests
Syntax: keepalive_requests number;
Default: keepalive_requests 100;
Context: http, server, location
设置通过一个保持活动连接可以提供服务的最大请求数。在发出最大请求数后,连接将关闭。
keepalive_disable
Syntax: keepalive_disable none | browser ...;
Default: keepalive_disable msie6;
Context: http, server, location
禁止与哪些行为不正常的浏览器保持活动连接。
send_timeout
Syntax: send_timeout time;
Default: send_timeout 60s;
Context: http, server, location
设置向客户端发送响应的超时时间。超时仅在两个连续的写入操作之间设置,不用于传输整个响应。如果客户端在此时间内未收到任何内容,则连接将关闭。
client_body_buffer_size
Syntax: client_body_buffer_size size;
Default: client_body_buffer_size 8k|16k;
Context: http, server, location
设置读取客户端请求body部分的buffer大小。如果请求body大于缓冲区,则整个body或其部分将写入临时文件。默认情况下,缓冲区大小等于两个内存页。x86平台默认是8k,x86_64平台是16k。
client_body_temp_path
Syntax: client_body_temp_path path [level1 [level2 [level3]]];
Default: client_body_temp_path client_body_temp;
Context: http, server, location
定义用于存储保存客户端请求body的临时文件的目录。指定目录下最多可以使用三级子目录层次结构。例如:
client_body_temp_path /spool/nginx/client_temp 1 2;
#临时文件的路径可能看起来像下面所示:
/spool/nginx/client_temp/7/45/00000123457
client_max_body_size
Syntax: client_max_body_size size;
Default: client_max_body_size 1m;
Context: http, server, location
设置客户端请求body部分的最大值。指定在请求头的“Content### Length”区域。如果超出这个值,则返回413错误。将大小设置为0将禁用对客户端请求body大小的检查。
limit_rate
Syntax: limit_rate rate;
Default: limit_rate 0;
Context: http, server, location, if in location
限制响应给客户端的传输速率,单位是bytes/second,默认值0表示无限制。
limit_except
Syntax: limit_except method ... { ... }
Default: —
Context: location
限制在location内使用的http方法。方法包括:GET, HEAD, POST, PUT, DELETE, MKCOL, COPY, MOVE, OPTIONS, PROPFIND, PROPPATCH, LOCK, UNLOCK, PATCH。允许GET方法时,HEAD方法也会被允许。例如:
limit_except GET {
allow 192.168.1.0/24;
deny all;
}
#除了GET和HEAD之外其它方法仅允许192.168.1.0/24网段主机使用