虚拟主机和请求的分发
监听端口
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、server、location
|
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、server、location
|
HTTP 包体尽量写入到一个内存 buffer 中
1 2 3
| 语法: client_body_in_single_buffer on|off; 默认: client_body_in_single_buffer off; 配置块: http、server、location
|
存储 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 ; 默认: 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、server、location
|
lingering_close
1 2 3
| 语法: lingering_close off|on|always; 默认: lingering_close on; 配置块: http、server、location
|
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、server、location
|
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、server、location
|
AIO 系统调用
1 2 3
| 语法: aio on|off; 默认: aio off; 配置块: http、server、location
|
directio
1 2 3
| 语法: directio size|off; 默认: directio off; 配置块: http、server、location
|
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、server、location
|
不被淘汰的最小访问次数
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、server、location
|
文件未找到时是否记录到 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》