http {
resolver 192.168.2.11 valid=30s;
# 全局域名解析服务器为192.168.2.11,30s更新一次DNS缓存
resolver_timeout 10s;
# 域名解析超时时间为10s
variables_hash_max_size 1024;
# Nginx变量的hash表的大小为1024字节
variables_hash_bucket_size 64;
# Nginx变量的hash表的哈希桶的大小是64字节
types_hash_max_size 1024;
# MIME类型映射表哈希表的大小为1024字节
types_hash_bucket_size 64;
# MIME类型映射表哈希桶的大小是64字节
# 请求解析,HTTP全局有效
ignore_invalid_headers on;
# 忽略请求头中无效的属性名
underscores_in_headers on;
# 允许请求头的属性名中有下划线“_”
client_header_buffer_size 2k;
# 客户请求头缓冲区大小为2KB
large_client_header_buffers 4 16k;
# 超大客户请求头缓冲区大小为64KB
client_header_timeout 30s;
# 读取客户请求头的超时时间是30s
request_pool_size 4k;
# 请求池的大小是4K
merge_slashes on;
# 当URI中有连续的斜线时做合并处理
server_tokens off;
# 当返回误信息时,不显示Nginx服务的版本号信息
msie_padding on;
#当客户端请求出错时,在响应数据中添加注释
subrequest_output_buffer_size 8k;
# 子请求响应报文缓冲区大小为8KB
lingering_close on;
# Nginx主动关闭连接时启用延迟关闭
lingering_time 60s;
# 延迟关闭的处理数据的最长时间是60s
lingering_timeout 5s;
# 延迟关闭的超时时间是5s
reset_timedout_connection on;
# 当Nginx主动关闭连接而客户端无响应时,在连接超时后进行关闭
log_not_found on;
# 将未找到文件的错误信息记录到日志中
log_subrequest on;
# 将子请求的访问日志记录到访问日志中
error_page 404 /404.html;
# 所有请求的404状态码返回404.html文件的数据
error_page 500 502 503 504 /50x.html;
# 所有请求的500、502、503、504状态码返回50×.html文件的数据
server {
# 监听本机的8000端口,当前服务是http指令域的主服务,开启fastopen功能并限定最大队列数是
# 30,拒绝空数据连接,Nginx工作进程共享socket监听端口,当请求阻塞时挂起队列数是1024个,当socket为保持连接时,开启状态检测功能
listen *:8000 default_server
fastopen=30 deferred reuseport backlog=1024
so_keepalive=on;
server_name a.nginxbar.com
b.nginxtest.net c.nginxbar.com a.nginxbar.com;
server_names_hash_max_size 1024;
# 服务主机名哈希表大小为1024字节
server_names_hash_bucket_size 128;
# 服务主机名哈希桶大小为128字节
# 保持链接配置
keepalive_disable msie6;
# 对MSIE6版本的客户端关闭保持连接机制
keepalive_requests 1000;
# 保持连接可复用的HTTP连接为1000个
keepalive_timeout 60s;
# 保持连接空置超时时间为60s
tcp_nodelay on;
# 当处于持连接状态时,以最快的方式发送数据包
# 本地文件相关配置
root /data/website;
# 当前服务对应本地文件访问的根目录是/data/website
disable_symlinks off;
# 对本地文件路径中的符号链接不做检测
# 静态文件场景
location / {
server_name_in_redirect on;
# 在重定向时,拼接服务主机名
port_in_redirect on;
# 在重定向时,拼接服务主机端口
if_modified_since exact;
# 当请求头中有if_modified_since属性时,与被请求的本地文件修改时间做精确匹配处理
etag on;
#启用etag功能
msie_refresh on; # 当客户端是msie时,以添加HTML头信息的方式执行跳转
open_file_cache max=1000 inactive=20s;
# 对被打开文件启用缓存支持,缓存元素数最大为1000个,不活跃的缓存元素保存20s
open_file_cache_errors on;
# 对无法找到文件的错误元素也进行缓存
open_file_cache_min_uses 2;
# 缓存中的元素至少要被访问两次才为活跃
open_file_cache_valid 60s;
# 每60s对缓存元素与本地文件进行一次检查
}
# 上传接口的场景应用
location /upload {
alias /data/upload
# 将upload的请求重定位到目录/data/upload
limit_except GET {
#对除GET以外的所有方法进行限制
allow 192.168.100.1;
#允许192.168.100.1执行所有请求方法
deny all;
# 其他IP只允许执行GET方法
}
client_max_body_size 200m;
# 允许上传的最大文件大小是200MB
client_body_buffer_size 16k;
# 上传缓冲区的大小是16KB
client_body_in_single_buffer on;
# 上传文件完整地保存在临时文件中
client_body_in_file_only off;
# 不禁用上传缓冲区
client_body_temp_path /tmp/upload 12;
# 设置请求体临时文件存储目录
client_body_timeout 120s;
# 请求体接收超时时间为120s
}
# 下载场景应用
location /download {
alias /data/upload
# 将download的请求重定位到目录/data/upload
types { }
default_type application/octet-stream;
# 设置当前目录所有文件默认MIME类型为application/octet-stream
try_files $uri @nofile;
# 当文件不存在时,跳转到location @nofile
sendfile on;
# 开启零复制文件传输功能
# sendfile_max_chunk 1M;
# 每个sendfile调用的最大传输量为1MB
tcp_nopush on;
# 启用最小传输限制功能
aio on;
# 启用异步传输
directio 5M;
# 当文件大于5MB时以直接读取磁盘方式读取文件
directio_alignment 4096;
#与磁盘的文件系统对齐
output_buffers 4 32k;
# 文件输出的缓冲区为128KB
limit_rate 1m;
# 限制下载速度为1MB
limit_rate_after 2m;
# 当客户端下载速度达到2MB时,进入限速模式
max_ranges 4096;
# 客户端执行范围读取的最大值是4096B
send_timeout 20s;
# 客户端引发传输超时时间为20s
postpone_output 2048;
# 当缓冲区的数据达到2048B时再向客户端发送
chunked_transfer_encoding on;
# 启用分块传输标识
}
location @nofile {
index nofile.html
}
location = /404.html {
internal;
}
location = /50x.html {
internal;
}
}
}