ngx_http_core_module
ngx_http_core_module是nginx中http模块的核心模块,所有其他的http模块必须依赖此模块。
上下文
- http: http服务配置
- server: http虚拟服务器配置
- location: 通过请求的
URI
配置,location可以自嵌套
指令
名称 | 参数类型 | 默认值 | 作用描述 | 上下文 |
---|---|---|---|---|
absolute_redirect | on/off | on | 是否使用绝对路径重定向 | http, server, location |
aio | on/off/threads[=pool] | off | 是否开启AIO支持 | http, server, location |
aio_write | on | off | 是否使用AOI写文件 | http, server, location |
alias | path | - | 为给定资源定义一个别名 | location |
auth_delay | time | 0s | 当使用了auth_basic/auth_request/auth_jwt模块时,定义授权超时时间 | http, server, location |
chunked_transfer_encoding | on/off | on | 是否开启分块编码传输 | http, server, location |
client_body_buffer_size | size | 8k(x86)/16k(x64) | 读取客户端请求报文的缓冲区大小 | http, server, location |
client_body_in_file_only | on/clean/off | off | 是否保存客户端请求报文到文件,常用于debug | http, server, location |
client_body_in_single_buffer | on/off | off | 是否将整个客户端请求体缓冲到一个单一的内存缓冲区中 | http, server, location |
client_body_temp_path | path | client_body_temp | 客户端请求体缓存目录(最多3层) | http, server, location |
client_body_timeout | time | 60s | 读取客户端请求体超时时长 | http, server, location |
client_header_buffer_size | size | 1k | 读取客户端请求头缓冲区大小 | http, server |
client_header_timeout | time | 60s | 读取客户端请求头超时时长 | http, server |
client_max_body_size | size | 1m | 客户端请求体大小限制 | http, server, location |
connection_pool_size | size | 256(x86)/512(x64) | 连接内存大小设置 | http, server |
default_type | mine-type | text/plain | 定义默认的响应MIME类型 | http, server, location |
directio | size /off | off | 文件大于配置size 时使用directio | http, server, location |
directio_alignment | size | 512 | 用于在使用directio 时的分块大小 | http, server, location |
disable_symlinks | off/on/if_not_owner [from=part ] | off | 是否禁用符号链接文件 | http, server, location |
error_page | code... [=[response code]] uri | - | 对特殊错误处理 | http, server, location |
etag | on/off | on | 自动对静态资源生成响应头中的ETag | http, server, location |
http | block | - | http上下文 | main |
if_modified_since | off/exact/before | exact | 对请求头If-Modified-Since 比较方法 | http, server, location |
ignore_invalid_headers | on/off | on | 是否忽略非法请求头 | http, server |
internal | - | - | 标记location只能被内部访问 | location |
keepalive_disable | none/browser... | msie6 | 禁用浏览器长连接 | http, server, location |
keepalive_requests | number | 1000 | 最大可用长连接请求数 | http, server, location |
keepalive_time | time | 1h | 长连接保持时长 | http, server, location |
large_client_header_buffers | number size | 4 8k | 大请求头大小及数量限制 | http, server |
limit_except | method block | - | 根据http方法类型限制location块 | location |
limit_rate | size | 0 | 限制响应每秒传输速度,0表示不限制 | http, server, location |
limit_rate_after | size | 0 | 当传输大小达到size时,开始限速 | http, server, location |
lingering_close | off/on/always | on | 关闭客户端连接方式 | http, server, location |
lingering_time | time | 30s | 当lingering_close生效时,接收客户端数据最长时长 | http, server, location |
lingering_timeout | time | 5s | 当lingering_close生效时,接收客户端数据超时时长 | http, server, location |
listen | port | *:80/*:8000 | web容器监听地址、端口 | server |
location | [=~/~*/^~] uri block | - | 请求URI配置 | server, location |
log_not_found | on/off | on | 是否记录404到error_log中 | http, server, location |
log_subrequest | on/off | off | 是否记录子请求到access_log中 | http, server, location |
max_ranges | number | - | 限制文件分段传输最大分段数量 | http, server, location |
merge_slashes | on/off | on | 合并2个及以上的/ | http, server |
msie_padding | on/off | on | 是否启用MSIE浏览器当状态码大于400时在响应中添加注释使正文长度为512字节 | http, server, location |
msie_refresh | on/off | off | 是否启用MSIE浏览器使用刷新代替重定向 | http, server, location |
open_file_cache | max=N [inactive=time]/off | off | 文件缓存配置 | http, server, location |
open_file_cache_errors | on/off | off | 是否缓存打开文件的错误信息 | http, server, location |
open_file_cache_min_uses | number | 1 | 在inactive 时间内,缓存所需要的最小访问次数 | http, server, location |
open_file_cache_valid | time | 60s | 检查缓存有效性间隔 | http, server, location |
output_buffers | number size | 2 32k | 用于读取硬盘文件响应的缓冲区数量及大小 | http, server, location |
port_in_redirect | on/off | on | 是否允许absolute_redirect 的端口 | http, server, location |
postpone_output | size | 1460 | 至少需要达到配置的size 字节数后,才会传输数据到客户端 | http, server, location |
read_ahead | size | 0 | 设置文件预读取字节数 | http, server, location |
recursive_error_pages | on/off | off | 是否允许多次重定向 | http, server, location |
request_pool_size | size | 4k | 预请求分配内存大小 | http, server |
reset_timedout_connection | on/off | off | 是否重置超时的连接 | http, server, location |
resolver | address... [valid=time ] [ipv4=on/off] [ipv6=on/off] [status_zone=zone ] | upstream 服务器地址解析器 | http, server, location | |
resolver_timeout | time | 30s | 解析器解析超时时长 | http, server, location |
root | path | html | 设置请求的根目录,常用语静态资源 | http, server, location |
satisfy | all/any | all | 当使用了授权模块,是否需要满足全部或其中一个即允许访问 | http, server, location |
send_lowat | size | 0 | - | http, server, location |
send_timeout | time | 60s | 传输响应数据到客户端两个写入操作之间的超时时长 | http, server, location |
sendfile | on/off | off | 是否启用sendfile() | http, server, location |
sendfile_max_chunk | size | 2m | 单次sendfile() 请求的数据大小限制 | http, server, location |
server | block | - | 虚拟web服务器配置 | http |
server_name | string ... | 设置虚拟服务器的名称 | server | |
server_name_in_redirect | on/off | off | 是否开启通过服务器名称重定向 | http, server, location |
server_names_hash_bucket_size | size | 32/64/128(跟处理器数量有关) | 设置服务器名称哈希表桶的大小 | http |
server_names_hash_max_size | size | 512 | 服务器名称哈希表元素数量限制 | http |
server_tokens | on/off/build/string | on | 设置响应的Server头内容 | http, server, location |
subrequest_output_buffer_size | size | 4k/8k(跟os相关) | 设置子请求响应内容缓冲区大小 | http, server, location |
tcp_nodelay | on/off | on | 是否启用TCP的TCP_NODELAY 选项 | http, server, location |
tcp_nopush | on/off | off | 是否启用TCP的TCP_NOPUSH 选项 | http, server, location |
try_files | file... uri/file... =code | - | 类似rewrite,在路径中查找文件,若匹配则返回,否则返回默认路径或响应码 | server, location |
types | block | - | 根据响应头映射文件类型 | http, server, location |
types_hash_bucket_size | size | 64 | types哈希表桶大小限制 | http, server, location |
types_hash_max_size | size | 1024 | types哈希表大小限制 | http, server, location |
underscores_in_headers | on/off | off | 是否允许客户端在请求头中使用下划线 | http, server |
variables_hash_bucket_size | size | 64 | 变量哈希表桶大小限制 | http |
variables_hash_max_size | size | 1024 | 变量哈希表大小限制 | http |
http指令/上下文
用于http服务配置,配置中只允许出现 一个
http上下文,若出现多个http块会报错nginx: [emerg] "http" directive is duplicate
, 常用语配置http服务公共配置。
nginx
http {
# 定义支持的MIME类型
include mime.types;
default_type application/octet-stream;
access_log logs/access.log main;
sendfile on;
keepalive_timeout 60s;
# 客户端报文体大小限制 常用于文件上传大小限制
client_max_body_size 20m;
# 包含conf/servers下的所有虚拟服务器配置
include servers/*.conf
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server指令/上下文
虚拟http主机配置,用于处理特定域、端口上的请求,通常http块中会包含多个server块。
nginx
server {
listen 80;
# 监听指定域名80端口
# listen abc.com:80;
server_name local_host abc.com;
root /home/html;
}
server {
listen 443 ssl;
server_name localhost abc.com;
# 证书
ssl_certificate cert.pem;
# 私钥
ssl_certificate_key cert.key;
# ssl验证相关配置
# 缓存有效期
ssl_session_timeout 5m;
# 加密算法
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
# 安全链接可选的加密协议
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# 使用服务器端的首选算法
ssl_prefer_server_ciphers on;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
location指令/上下文
listen指令
nginx
server {
# 监听ip加端口或者端口或者socket
listen address[:port]/port/unix:path\
# 是否是监听地址的默认处理主机
[default_server]\
# 是否启用ssl
[ssl]\
# 启用http2或http3
[http2 | quic]\
# 标记监听所有连接均满足代理协议
[proxy_protocol]\
# 监听路由表,仅对FreeBSD生效
[setfib=number]\
# TCP Fast Open队列长度
[fastopen=number]\
# 等待连接队列长度
[backlog=number]\
# 设置接收数据缓冲区大小
[rcvbuf=size]\
# 设置发送数据缓冲区大小
[sndbuf=size]\
# 连接过滤器
[accept_filter=filter]\
# 若数据为空 延迟接收
[deferred]\
# 用于区分绑定相同端口到不同address:port对
[bind]\
# 是否只支持ipv6
[ipv6only=on|off]\
# 多个工作进程可以同时监听同一个address:prot对
[reuseport]\
# 长连接配置 开启默认值 大多操作系统默认值为2h:60s:9
# 分别表示连接闲置时长、探测间隔时长、发送探测次数
[so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
}
server {
# 直接监听端口
listen 80;
listen 443 ssl;
# ip加端口
listen 192.168.5.100:80;
# 任意可用ip加端口
listen *:80;
# ipv6加端口
listen [fe80::d62b:4aab:cbc6:ae7a]:80;
# 任意可用ipv6加端口
listen [::]:80;
listen [::]:443 ssl;
# 域名加端口
listen abc.com:80;
listen localhost:80;
# socket
listen unix:/var/run/nginx.sock;
}
server {
# 同时监听多个端口
# 此时使用http://www.abc.com或https://www.abc.com访问都可以
listen 80;
listen 443 ssl;
server_name www.abc.com;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
try_files指令
alias/root指令
error_page指令
自定义错误页面指令,可以处理在出现不同类型的HTTP错误时的自定义错误页面或者重定向到其他URL, 若资源路径为相对路径,则直接使用页面进行rewrite,若资源路径是全路径,则使用重定向,可自行制定30x状态码。
nginx
server {
# 服务端错误码
error_page 502 503 /50x.html;
# 404处理
error_page 404 /404.html;
# 外部重定向
error_page 404 =301 https://www.baidu.com;
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
注意
多个状态码处理,由上到下,找到第一个满足的则匹配,如上面示例,404只会匹配内部处理,不会重定向百度。
internal指令
internal指令用于标记location块只能被nginx内部请求访问,不会直接暴露给外部。
nginx
location / {
internal;
# 其他配置
}
1
2
3
4
2
3
4
内置变量
名称 | 描述 |
---|---|
$arg_name | 获得name 参数值,name 表示query参数名称 |
$args | 所有参数参数 |
$binary_remote_addr | 客户端二进制地址 |
$body_bytes_sent | 已发送至客户端报文体字节数(不含头) |
$bytes_sent | 已发送至客户端字节数 |
$connection | 连接序号 |
$connection_requests | 当前连接创建的请求数量 |
$connection_time | 连接时长(毫秒) |
$content_length | 请求头Content-Length |
$content_type | 请求头Content-Type |
$cookie_name | 获得name 值,name 表示cookie名称 |
$document_root | 当前请求root 或alias 指令值 |
$document_uri | 请求URI,同$uri |
$host | query参数中的host或Host 请求头或匹配的server name |
$host_name | 服务器主机名 |
$http_name | 获得name 请求头的值,name 表示请求头名称(小写、中线替换为下划线) |
$https | 值为on 表示标识ssl,空字符串表示非ssl |
$is_args | 值为? 表示存在query参数,空字符串表示没有query参数 |
$limit_rate | 设置传输速率限制,set $limit_rate 4k ,参考limit_rate指令 |
$msec | 当前时间戳 |
$nginx_version | nginx版本号 |
$pid | 工作进程号 |
$pipe | 值为p 表示管道,值为. 表示其他 |
$proxy_protocol_addr | 客户端代理地址 |
$proxy_protocol_port | 客户端代理端口 |
$proxy_protocol_server_addr | 代理服务地址 |
$proxy_protocol_server_port | 代理服务端口 |
$proxy_protocol_tlv_name | 代理服务TLV 类型 |
$query_string | 同$args |
$realpath_root | 当前请求root 或alias 的绝对路径 |
$remote_addr | 客户端地址 |
$remote_port | 客户端端口 |
$remote_user | 若使用BASIC认证,表示其用户名 |
$request | 请求全URI |
$request_body | 请求体 |
$request_body_file | 请求文件 |
$request_completion | 值为OK 表示请求完成,否则为空字符串 |
$request_filename | 当前请求文件路径, 以root 或alias 的值为根 |
$request_id | 请求id |
$request_length | 请求大小,包括URI、头、报文体 |
$request_method | 请求方法名 |
$request_time | 请求耗时 |
$request_uri | 原始请求URI,包括query参数 |
$scheme | http/https |
$sent_http_name | 获得name 响应头的值,name 表示响应头名称(小写、中线替换为下划线) |
$sent_trailer_name | 获得响应最后部分的name 参数的值,name 表示参数名称(小写、中线替换为下划线) |
$server_addr | 处理当前请求的服务器地址 |
$server_name | 处理当前请求的服务器名称 |
$server_port | 处理当前请求的服务器端口 |
$server_protocol | 请求协议,通常为HTTP/1.0 /HTTP/1.1 /HTTP/2.0 /HTTP/3.0 |
$status | 响应状态码 |
$tcpinfo_rtt/$tcpinfo_rttvar/$tcpinfo_snd_cwnd/$tcpinfo_rcv_space | 客户端TCP相关信息 |
$time_iso8601 | 当前iso8601格式时间 |
$time_local | 当前日志格式时间 |
$uri | 请求URI |