虚拟主机和请求的分发

监听端口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
语法: listen address:port [default_server|[backlog=num|rcvbuf=size|sndbuf=size|accept_filter=filter|defered|bind|ipv6=[on|off]|ssl]];
默认: listen 80;
配置块: server
listen 参数决定 Nginx 服务如何监听端口。
listen 127.0.0.1:8000;
listen 127.0.0.1; # 不加端口时,默认监听 80 端口
listen 8000;
listen *:8000;
listen localhost:8000;

listen [::]:8000;
listen [fe80::1];
listen [:::a8c9:1234]:80;

listen 443 default_server ssl;
listen 127.0.0.1 default_server accept_filter=dataready backlog=1024;

主机名称

1
2
3
4
5
6
语法: server_name name [...];
默认: server_name "";
配置块: server
server_name 后可以跟多个主机名称
多个 server_name 匹配优先级顺序为 完全匹配、通配符、正则
如果 server_name 后跟着空字符串,那么表示匹配没有 Host 这个 HTTP 头部的请求。

server_names_hash_bucket_size

1
2
3
语法: server_names_hash_bucket_size size;
默认: server_names_hash_bucket_size 32|64|128;
配置块: http、server、location

server_names_hash_max_size

1
2
3
语法: server_names_hash_max_size size;
默认: server_names_hash_max_size 512;
配置块: http、server、location

重定向主机名称的处理

1
2
3
4
5
6
语法: server_name_in_redirect on|off;
默认: server_name_in_redirect on;
配置块: http、server、location
该配置需要配合 server_name 使用。
on 表示在重定向请求时会使用 server_name 里配置的第一个主机名代替原先请求
off 表示使用请求本身的 Host 头部。

location

1
2
3
4
5
6
7
8
语法: location [=|~|~*|^~|@]/uri/ { ... }
配置块: server
= 完全匹配
~ 大小写敏感
~* 大小写不敏感
^~ 请求的URI 前半部分与 uri 匹配即可
@ 表示仅用于 Nginx 服务内部请求之间的重定向,不直接处理用户请求
一个请求匹配多个 location 时,会被第一个 location 处理。

文件路径的定义

以 root 方式设置资源路径

1
2
3
语法: root path;
默认: root html;
配置块: http、server、location、if

以 alias 方式设置资源路径

1
2
3
4
5
6
7
8
9
10
11
12
13
14
语法: alias path;
配置块: location

与 root 相比,alias 会把 location 后配置的字符串丢掉

如果有一个 URI 为 /conf/nginx.conf,希望指向 /usr/local/nginx/conf/nginx.conf,用 root 或 alias 的设置如下

location /conf {
root /usr/local/nginx/;
}

location /conf {
alias /usr/local/nginx/conf/;
}

访问首页

1
2
3
4
5
6
7
8
语法: index file ...;
默认: index index.html;
配置块: http、server、location

location / {
root path;
index /index.html /html/index.php /index.php;
}

根据 HTTP 返回码重定向页面

1
2
3
4
5
6
7
8
9
10
语法: error_page code [code ...][=|=answer-code] uri|@named_location
配置块: http、server、location、if

location / {
error_page 404 @fallback;
}

location @fallback {
proxy_pass http://backend;
}

是否允许递归使用 error_page

1
2
3
语法: recursive_error_pages [on|off]
默认: recursive_error_pages off;
配置块: http、serverlocation

try_files

1
2
语法: try_files path1 [path2] uri;
配置块: server、location

内存及磁盘资源的分配

HTTP 包体只存储到磁盘文件中

1
2
3
语法: client_body_in_file_only on|clean|off;
默认: client_body_in_file_only off;
配置块: http、serverlocation

HTTP 包体尽量写入到一个内存 buffer 中

1
2
3
语法: client_body_in_single_buffer on|off;
默认: client_body_in_single_buffer off;
配置块: http、serverlocation

存储 HTTP 头部的内存 buffer 大小

1
2
3
语法: client_header_buffer_size size;
默认: client_header_buffer_size 1k;
配置块: http、server

存储超大 HTTP 头部的内存 buffer 大小

1
2
3
语法: large_client_header_buffers number size;
默认: large_client_header_buffers 4 8k;
配置块: http、server

存储 HTTP 包体的内存 buffer 大小

1
2
3
语法: client_body_buffer_size size;
默认: client_body_buffer_size 8k/16k;
配置块: http、server、location

HTTP 包体的临时存放目录

1
2
3
语法: client_body_temp_path dir-path [ level1 [level2 [level3 ] ] ];
默认: client_body_temp_path client_body_temp;
配置块: http、server、location

connection_pool_size

1
2
3
语法: connection_pool_size size;
默认: connection_pool_size 256;
配置块: http、server

request_pool_size

1
2
3
语法: request_pool_size size;
默认: request_pool_size 4k;
配置块: http、server

网络连接的设置

读取 HTTP 头部的超时时间

1
2
3
语法: client_header_timeout time(默认单位:秒);
默认: client_header_timeout 60;
配置块: http、server、location

读取 HTTP 包体的超时时间

1
2
3
语法: client_body_timeout time;
默认: client_body_timeout 60;
配置块: http、server、location

发送响应的超时时间

1
2
3
语法: send_timeout time;
默认: send_timeout 60;
配置块: http、server、location

reset_timeout_connection

1
2
3
语法: reset_timeout_connection on|off;
默认: reset_timeout_connection off;
配置块: http、serverlocation

lingering_close

1
2
3
语法: lingering_close off|on|always;
默认: lingering_close on;
配置块: http、serverlocation

lingering_time

1
2
3
语法: lingering_time time;
默认: lingering_time 30s;
配置块: http、server、location

对某些浏览器禁用 keepalive 功能

1
2
3
语法: keepalive_disable [msie6|safari|none]...
默认: keepalive_disable msie6 safari
配置块: http、server、location

keepalive 超时时间

1
2
3
语法: keepalive_timeout time;
默认: keepalive_timeout 75;
配置块: http、server、location

一个 keepalive 长连接上允许承载的请求最大数

1
2
3
语法: keepalive_requests n;
默认: keepalive_requests 100;
配置块: http、server、location

tcp_nodelay

1
2
3
语法: tcp_nodelay on|off;
默认: tcp_nodelay on;
配置块: http、server、location

tcp_nopush

1
2
3
语法: tcp_nopush on|off;
默认: tcp_nopush off;
配置块: http、serverlocation

MIME 类型的设置

MIME type 与文件扩展的映射

1
2
3
4
5
6
7
8
9
语法: type {...};
配置块: http、server、location

types {
text/html html;
text/html conf;
image/gif gif;
image/jpeg jpg;
}

默认 MIME type

1
2
3
语法: default_type MIME-type;
默认: default_type text/plain;
配置块: http、server、location

types_hash_bucket_size

1
2
3
语法: types_hash_bucket_size size;
默认: types_hash_bucket_size 32|64|128;
配置块: http、server、location

types_hash_max_size

1
2
3
语法: types_hash_max_size size;
默认: types_hash_max_size 1024;
配置块: http、server、location

对客户端请求的限制

按 HTTP 方法名限制用户请求

1
2
3
4
5
6
7
8
语法: limit_except method ... {...}
配置块: location

example:
limit_except GET {
allow 192.168.1.0/32;
deny all;
}

HTTP 请求包体的最大值

1
2
3
语法: client_max_body_size size;
默认: client_max_body_size 1m;
配置块: http、server、location

对请求的限速

1
2
3
语法: limit_rate speed;
默认: limit_rate 0;
配置块: http、server、location、if

limit_rate_after

1
2
3
语法: limit_rate_after time;
默认: limit_rate_after 1m;
配置块: http、server、location、if

文件操作的优化

sendfile 系统调用

1
2
3
语法: sendfile on|off;
默认: sendfile off;
配置块: http、serverlocation

AIO 系统调用

1
2
3
语法: aio on|off;
默认: aio off;
配置块: http、serverlocation

directio

1
2
3
语法: directio size|off;
默认: directio off;
配置块: http、serverlocation

directio_alignment

1
2
3
语法: directio_alignment size;
默认: directio_alignment 512;
配置块: http、server、location

打开文件缓存

1
2
3
4
5
6
语法: open_file_cache max = N [inactive=time] | off;
默认: open_file_cache off;
配置块: http、server、location

example:
open_file_cache max=1000 inactive=20s;

是否缓存打开文件错误的信息

1
2
3
语法: open_file_cache_errors on|off;
默认: open_file_cache_errors off;
配置块: http、serverlocation

不被淘汰的最小访问次数

1
2
3
语法: open_file_cache_min_uses number;
默认: open_file_cache_min_uses 1;
配置块: http、server、location

检验缓存中元素有效性的频率

1
2
3
语法: open_file_cache_valid time;
默认: open_file_cache_valid 60s;
配置块: http、server、location

对客户端的特殊处理

忽略不合法的 HTTP 头部

1
2
3
语法: ignore_invalid_headers on|off;
默认: ignore_invalid_headers on;
配置块: http、server

HTTP 头部是否允许下划线

1
2
3
语法: underscores_in_headers on|off;
默认: underscores_in_headers off;
配置块: http、server

对 If-Modified-Since 头部的处理策略

1
2
3
语法: if_modified_since [off|exact|before];
默认: if_modified_since exact;
配置块: http、serverlocation

文件未找到时是否记录到 error 日志

1
2
3
语法: log_not_found on|off;
默认: log_not_found on;
配置块: http、server、location

merge_slashes

1
2
3
4
语法: merge_slashes on|off;
默认: merge_slashes on;
配置块: http、server、location
此配置项表示是否合并相邻的 /

DNS 解析地址

1
2
3
语法: resolver address ...;
配置块: http、server、location
设置 DNS 解析服务器的地址

DNS 解析的超时时间

1
2
3
语法: resolver_timeout time;
默认: resolver_timeout 30s;
配置块: http、server、location

返回错误页面时是否在 Server 中注明 Nginx 版本

1
2
3
语法: server_tokens on|off;
默认: server_tokens on;
配置块: http、server、location

参考书籍: 《深入理解Nginx》