Ubuntu搭建nginx文件下载目录

安装

复制这个到边上搜索栏中搜索就可以看到了 安装nginx最新版本


不知道配置

配置主题

第三方主题

可用主题‌:

  • TheInsomniac主题
  • Naereen主题
  • fraoustin主题
  • alehaa主题

查看nginx安装目录

使用 whereis 命令

该命令会显示Nginx的可执行文件、配置文件和文档路径:

1
whereis nginx

典型输出示例:

1
nginx: /usr/sbin/nginx /etc/nginx /usr/share/nginx /usr/share/man/man8/nginx.8.gz
  • /usr/sbin/nginx:主程序路径
  • /etc/nginx:配置文件目录
  • /usr/share/nginx:默认静态文件目录‌

通过 nginx -V 查看编译参数

运行以下命令可获取Nginx的编译安装路径(--prefix参数):

1
nginx -V

输出中的 --prefix=/usr 或类似参数即为安装根目录‌

安装主题

安装依赖环境

安装ngx-fancyindex模块

  1. Ubuntu/Debian系统可通过官方仓库安装:
1
2
apt update
apt install libnginx-mod-http-fancyindex
  1. 安装后需在/etc/nginx/nginx.conf中加载模块:
1
load_module "modules/ngx_http_fancyindex_module.so";

注意:如果出现以下错误,代表模块已经加载

1
module "ngx_http_fancyindex_module" is already loaded in /etc/nginx/nginx.conf:7

模块加载的配置路径是该路径下的配置文件

1
/etc/nginx/modules-enabled/

**安装nginx-extras**‌

验证模块安装

运行以下命令检查模块是否启用:

1
nginx -V 2>&1 | grep fancyindex

若输出包含--with-http_fancyindex_module则说明安装成功。‌

主题安装步骤

下载主题文件


配置不同方式文件处理

配置下载文件

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
location /{
alias /www/wwwroot/download/;
sendfile on; # 启用零拷贝,直接读取文件发送到网络中;启用零拷贝技术(内核直接传输文件)
autoindex on; # 开启目录索引功能,可选,用于展示目录内容列表
autoindex_exact_size on; # 显示确切大小,单位bytes
autoindex_localtime on; # 显示服务器时间
charset utf-8,gbk; # 避免中文乱码

# 大文件下载优化
# 启用代理缓冲机制,允许Nginx先将后端响应暂存到内存/磁盘,再按客户端网速分发,避免慢速客户端拖垮后端连接
proxy_buffering on;
# 设置响应头缓冲区大小,用于存储后端返回的初始响应头(如HTTP状态码、Content-Type),需与其他缓冲区分离以避免污染
proxy_buffer_size 4k; # 可以进行扩大
# 定义主缓冲区数量(8个)和单个大小(1MB),总缓冲容量为8MB。超出容量的响应内容将写入磁盘临时文件
proxy_buffers 8 1m; # 可以进行扩大缓冲区数量
# 控制忙碌状态缓冲区大小(2MB),当缓冲数据正传输给客户端时,该部分缓冲区被标记为“忙碌”,确保传输连续性
proxy_busy_buffers_size 2m;
# 禁用临时文件大小限制(0表示无上限),避免大文件因临时文件超限而中断下载
proxy_max_temp_file_size 0;
# 指定临时文件存储目录需确保Nginx进程对该目录有读写权,否则触发Permission denied错误导致下载失败
proxy_temp_path /tmp 1 2; # 指定临时目录,确保磁盘空间足够
proxy_temp_file_write_size 8m; # 单次写入磁盘的数据块大小

# 超时设置
# Nginx与后端服务器建立TCP连接的超时时间(600秒),适用于高延迟网络或后端响应缓慢的场景
proxy_connect_timeout 600;
# 向后端发送请求数据的超时时间(600秒),覆盖从发送请求头到完成请求体的全过程。对大文件上传场景尤为重要
proxy_send_timeout 600;
# 从后端读取响应的超时时间(600秒),关键参数:若下载中断,需优先增大此值,确保Nginx有足够时间接收完整文件。
proxy_read_timeout 600;



# 传输优化
# 启用内核零拷贝(zero-copy)机制,文件传输绕过用户空间直接在内核处理,大幅提升静态文件传输效率
sendfile on;
# 仅在数据包满时发送,减少小包数量,提升网络利用率(需与sendfile on配合使用)
tcp_nopush on;
# 禁用Nagle算法,允许小数据包实时传输,降低延迟(适用于高交互场景)
tcp_nodelay on;
}

# 禁止上级目录访问
location ~ /\.(ht|svn|git) {
deny all; # 禁止访问隐藏文件
}

# 禁止访问的目录
location ^~ /xxxxx/ {
deny all;
return 403;
}

location ~ /\.\./ {
deny all; # 防止路径遍历攻
}

**keepalive_timeout 65;**:控制TCP长连接保持时间(65秒),减少重复握手开销,提升连续传输效率

server_tokens off; : 隐藏版本信息

proxy_busy_buffers_size要大于proxy_buffer_size

配置视频播放

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
64
65
66
67
68
69
70
71
72
    # 连接优化
keepalive_timeout 300s; # 保持长连接避免中断
sendfile on; # 零拷贝加速文件传输
tcp_nopush on; # 减少网络包数量

location / {
alias /Xmp4/; # 视频实际存储路径
autoindex on; # 启用目录浏览(可选)
autoindex_exact_size off; # 显示文件大致大小(非精确字节)
autoindex_localtime on; # 显示本地时间
add_header Accept-Ranges bytes; # 启用断点续传
proxy_buffering off; # 禁用代理缓冲(实时流)
chunked_transfer_encoding on; # 启用分块传输编码

server_tokens off; # 隐藏版本信息

# add_header Cache-Control no-cache; # 禁用缓存(避免播放中断)
# 缓存控制(仅对该路径生效)
add_header Cache-Control "public, max-age=86400"; # 24小时缓存

# 异步I/O与直接IO
aio on; # 启用内核级异步文件读取,避免工作进程阻塞,提升高并发下的吞吐量
directio 4m; # 对超过4MB的文件禁用系统缓存,直接读写磁盘,避免大文件挤占内存

# 超时控制
keepalive_timeout 300; # 保持客户端连接300秒后断开,减少TCP握手开销
send_timeout 300; # 向客户端发送数据的超时时间为300秒,防止慢速客户端占用连接

# 压缩配置
gzip off; # 禁用实时压缩响应内容(视频等二进制文件压缩效果差且耗CPU)
gzip_static off; # 禁止使用预压缩的.gz文件(如存在video.mp4.gz也不会被自动调用)

mp4; # 启用MP4流式传输
mp4_buffer_size 1m; # 初始元数据缓冲区=1MB
mp4_max_buffer_size 10m; # 最大元数据缓冲区=10MB

types {
video/mp4 mp4;
video/webm webm;
# 添加其他格式(如 flv, mkv 等)
}
default_type application/octet-stream; # 默认二进制流

# 防爬虫中断
if ($http_user_agent ~* (bot|crawler)) {
return 444; # 丢弃爬虫连接
}

}

# 忽略favicon.ico请求
location = /favicon.ico {
access_log off;
log_not_found off;
return 204;
}

# 禁止上级目录访问
location ~ /\.(ht|svn|git) {
deny all; # 禁止访问隐藏文件
}

# 禁止访问的目录
location ^~ /XXX/ {
deny all;
return 403;
}

location ~ /\.\./ {
deny all; # 防止路径遍历攻
}

access_log off: 减少日志写入开销

如果要上传文件

1
2
3
4
5
# 文件大小限制(如果只做文件下载功能,请不要配置这些参数)
# 取消客户端请求体大小限制(0表示无上限),允许上传超大文件至服务器
client_max_body_size 0;
# 设置内存缓冲区大小(128KB),用于存储客户端请求体。超出时写入磁盘临时文件,减少内存压力。
client_body_buffer_size 128k;

注意

下载中断在固定大小

检查proxy_temp_path磁盘空间及权限(chown -R nginx_user /path/to/temp),并确认proxy_max_temp_file_size=0

速度波动明显

调整缓冲区比例(如proxy_buffers 16 1m + proxy_busy_buffers_size 4m),或关闭压缩gzip off减少CPU瓶颈

频繁超时中断

按网络质量阶梯式增加超时(如局域网:proxy_*_timeout 300;公网:600~1200),同时监控后端服务响应。‌