2、http核心模块(ngx_http_core_module)

http

  1. Syntax: http { ... }
  2. Default:
  3. Context: main

提供配置文件上下文,其里面指定HTTP服务器指令

server

  1. Syntax: server { ... }
  2. Default:
  3. Context: http

配置虚拟主机。基于IP的和基于域名的虚拟主机没有明显的分隔。listen指令描述了接收连接的所有地址和端口,server_name指令列出了所有的域名。

listen

  1. 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]];
  2. 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]];
  3. 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]];
  4. Default: listen *:80 | *:8000;
  5. Context: server

设置IP的地址和端口,或服务器将接受请求的Unix域套接字的路径,例如:

  1. listen 127.0.0.1:8000;
  2. listen 127.0.0.1;
  3. listen 8000;
  4. listen *:8000;
  5. listen localhost:8000;
  6. listen [::]:8000;
  7. listen [::1];
  8. listen unix:/var/run/nginx.sock;

server_name

  1. Syntax: server_name name ...;
  2. Default: server_name "";
  3. Context: server

设置虚拟服务器的名字。例如:

  1. server {
  2. server_name example.com www.example.com;
  3. }
  4. #服务器名称可以包括星号(“*”)来替换名称的第一部分或最后一部分:
  5. server {
  6. server_name example.com *.example.com www.example.*;
  7. }
  8. #支持~起始的字符做正则表达式模式匹配,性能原因慎用
  9. server {
  10. server_name www.example.com ~^www\d+\.example\.com$; #\d表示[0### 9]
  11. }

匹配优先级机制从高到低:

  1. 首先是字符串精确匹配 如:www.shengzhe.com
  2. 左侧通配符 如: *.shengzhe.com
  3. 右侧通配符 如: www.shengzhe.*
  4. 正则表达式 如: ~^.*.shengzhe.com$
  5. default_server

root

  1. Syntax: root path;
  2. Default: root html;
  3. Context: http, server, location, if in location

设置请求的根目录,例如:

  1. location /i/ {
  2. root /data/w3;
  3. }
  4. # /data/w3/i/top.gif文件将响应“/i/top.gif”请求而发送
  5. # 路径值可以包含变量,除了$document_root和$realpath_root。

alias

  1. Syntax: alias path;
  2. Default:
  3. Context: location

定义指定的location的一个替换

  1. location /i/ {
  2. alias /data/w3/images/;
  3. }
  4. #对于“/i/top.gif”的请求,将发送文件/data/w3/images/top.gif。
  5. #路径值可以包含变量,除了$document_root和$realpath_root
  6. #alias 后面必须要用 “/” 结束,否则会找不到文件
  7. #如果alias配置在正则匹配的location内,则正则表达式中必须包含捕获语句(也就是括号()),
  8. #而且alias配置中也要引用这些捕获值。如:
  9. location ~ ^/users/(.+\.(?:gif|jpe?g|png))$ {
  10. alias /data/w3/images/$1;
  11. }

location

  1. Syntax: location [ = | ~ | ~* | ^~ ] uri { ... }
  2. location @name { ... }
  3. Default:
  4. Context: server, location

根据请求的URI设置配置。
在一个server中location配置段可存在多个,用于实现URI到文件系统的路径映射;

匹配字符串分为两种:普通字符串(literal string)和正则表达式(regular expression),其中 ~ 和 ~* 用于正则表达式, 其他前缀和无任何前缀都用于普通字符串。

匹配顺序是:

  1. 先匹配普通字符串,将最精确的匹配暂时存储;
  2. 然后按照配置文件中的声明顺序进行正则表达式匹配,只要匹配到一条正则表达式,则停止匹配,取正则表达式为匹配结果;
  3. 如果所有正则表达式都匹配不上,则取1中存储的结果;
  4. 如果普通字符串和正则表达式都匹配不上,则报404 NOT FOUND
  5. “^~ ”和“= ”都能阻止继续搜索正则location。不同点是“^~ ”依然遵守“最大前缀”匹配规则,然而“= ”不是“最大前缀”,而是必须是严格匹配
  6. 只要遇到“精确匹配exact match ”,即使普通location 没有带“= ”或“^~ ”前缀,也一样会终止后面的匹配。例如:
  1. location = /uri =开头表示精确前缀匹配,只有完全匹配才能生效。
  2. location ^~ /uri ^~开头表示普通字符串匹配上以后不再进行正则匹配。
  3. location ~ pattern ~开头表示区分大小写的正则匹配。
  4. location ~* pattern ~*开头表示不区分大小写的正则匹配。
  5. location /uri 不带任何修饰符,表示前缀匹配。
  6. location / 通用匹配,任何未匹配到其他location的请求都会匹配到。

配置举例:

  1. location = / {
  2. [ configuration A ]
  3. }
  4. location / {
  5. [ configuration B ]
  6. }
  7. location /documents/ {
  8. [ configuration C ]
  9. }
  10. location ^~ /images/ {
  11. [ configuration D ]
  12. }
  13. location ~* \.(gif|jpg|jpeg)$ {
  14. [ configuration E ]
  15. }
  16. #“/” 请求匹配configuration A;
  17. #“/index.html”请求匹配configuration B;
  18. #“/documents/document.html”请求匹配configuration C;
  19. #“/images/1.gif”请求匹配configuration D;
  20. #“/documents/1.jpg”请求匹配configuration E。
  21. #注意:正则匹配会根据匹配顺序,找到第一个匹配的正则表达式后将停止搜索。
  22. #普通字符串匹配则无视顺序,只会选择最精确的匹配。

tcp_nodelay

  1. Syntax: tcp_nodelay on | off;
  2. Default: tcp_nodelay on;
  3. Context: http, server, location

当连接转换为保持活动(keep### alive)状态时,启用该选项。此外,它在SSL连接、无缓冲代理和WebSocket代理上也要启用。

tcp_nopush

  1. Syntax: tcp_nopush on | off;
  2. Default: tcp_nopush off;
  3. Context: http, server, location

启用或禁FreeBSD上的tcp_nopush socket选项或Linux上的tcp_cork socket选项。只有在使用sendfile时才启用这些选项。

senfile

  1. Syntax: sendfile on | off;
  2. Default: sendfile off;
  3. 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的性能。
例如:

  1. location /video/ {
  2. sendfile on;
  3. tcp_nopush on;
  4. aio on;
  5. }

server_tokens

  1. Syntax: server_tokens on | off | build | string;
  2. Default: server_tokens on;
  3. Context: http, server, location

在错误页和“服务器”响应头字段中启用或禁用发出nginx版本。

error_page

  1. Syntax: error_page code ... [=[response]] uri;
  2. Default:
  3. Context: http, server, location, if in location

定义为指定错误显示的URI。URI值可以包含变量。
例如:

  1. error_page 404 /404.html;
  2. error_page 500 502 503 504 /50x.html;
  3. #这将导致内部重定向到指定的URI,客户端请求方法更改为“GET”(对于除“GET”和“HEAD”之外的所有方法)。
  4. #此外,可以使用“=response”语法将响应代码更改为其他代码,例如:
  5. error_page 404 =200 /empty.gif;

keepalive_timeout

  1. Syntax: keepalive_timeout timeout [header_timeout];
  2. Default: keepalive_timeout 75s;
  3. Context: http, server, location

设定客户端保持连接超时时长, 0表示禁止。Mozilla和Konqueror可以识别,MSIE自己会在60s后关闭连接。

keepalive_requests

  1. Syntax: keepalive_requests number;
  2. Default: keepalive_requests 100;
  3. Context: http, server, location

设置通过一个保持活动连接可以提供服务的最大请求数。在发出最大请求数后,连接将关闭。

keepalive_disable

  1. Syntax: keepalive_disable none | browser ...;
  2. Default: keepalive_disable msie6;
  3. Context: http, server, location

禁止与哪些行为不正常的浏览器保持活动连接。

send_timeout

  1. Syntax: send_timeout time;
  2. Default: send_timeout 60s;
  3. Context: http, server, location

设置向客户端发送响应的超时时间。超时仅在两个连续的写入操作之间设置,不用于传输整个响应。如果客户端在此时间内未收到任何内容,则连接将关闭。

client_body_buffer_size

  1. Syntax: client_body_buffer_size size;
  2. Default: client_body_buffer_size 8k|16k;
  3. Context: http, server, location

设置读取客户端请求body部分的buffer大小。如果请求body大于缓冲区,则整个body或其部分将写入临时文件。默认情况下,缓冲区大小等于两个内存页。x86平台默认是8k,x86_64平台是16k。

client_body_temp_path

  1. Syntax: client_body_temp_path path [level1 [level2 [level3]]];
  2. Default: client_body_temp_path client_body_temp;
  3. Context: http, server, location

定义用于存储保存客户端请求body的临时文件的目录。指定目录下最多可以使用三级子目录层次结构。例如:

  1. client_body_temp_path /spool/nginx/client_temp 1 2;
  2. #临时文件的路径可能看起来像下面所示:
  3. /spool/nginx/client_temp/7/45/00000123457

client_max_body_size

  1. Syntax: client_max_body_size size;
  2. Default: client_max_body_size 1m;
  3. Context: http, server, location

设置客户端请求body部分的最大值。指定在请求头的“Content### Length”区域。如果超出这个值,则返回413错误。将大小设置为0将禁用对客户端请求body大小的检查。

limit_rate

  1. Syntax: limit_rate rate;
  2. Default: limit_rate 0;
  3. Context: http, server, location, if in location

限制响应给客户端的传输速率,单位是bytes/second,默认值0表示无限制。

limit_except

  1. Syntax: limit_except method ... { ... }
  2. Default:
  3. Context: location

限制在location内使用的http方法。方法包括:GET, HEAD, POST, PUT, DELETE, MKCOL, COPY, MOVE, OPTIONS, PROPFIND, PROPPATCH, LOCK, UNLOCK, PATCH。允许GET方法时,HEAD方法也会被允许。例如:

  1. limit_except GET {
  2. allow 192.168.1.0/24;
  3. deny all;
  4. }
  5. #除了GET和HEAD之外其它方法仅允许192.168.1.0/24网段主机使用