博客 / Linux/ nginx做静态文件下载服务器之安装与配置(含vsftp安装使用)

nginx做静态文件下载服务器之安装与配置(含vsftp安装使用)

nginx做静态文件下载服务器之安装与配置(含vsftp安装使用)

一、准备工作

本文以 CentOS 7 64位系统为例,介绍如何将 Nginx 配置为静态文件下载服务器,并集成 FTP 服务用于文件上传。

1. 创建 Screen 会话

为避免编译过程因网络中断而失败,建议先创建一个 Screen 会话。

screen

2. 创建 Nginx 运行用户

为安全起见,建议为 Nginx 服务创建一个专用的系统用户和用户组。

/usr/sbin/groupadd -f www
/usr/sbin/useradd -g www www

如需查看系统用户和组,可使用以下命令:

cat /etc/group
cat /etc/passwd

3. 更新系统并安装编译工具

更新系统软件包并安装 Nginx 编译所需的依赖。

yum -y update
yum -y install gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre-devel zip unzip net-snmp snmp-mibs-utils vsftpd

二、Nginx 及模块安装

1. 下载并准备第三方模块

创建一个目录用于存放下载的模块源码。

mkdir /DLserver
cd /DLserver

下载 Nginx-accesskey 模块(防盗链)

wget http://wiki.nginx.org/images/5/51/Nginx-accesskey-2.0.3.tar.gz
tar -xzvf Nginx-accesskey-2.0.3.tar.gz
rm -f Nginx-accesskey-2.0.3.tar.gz

编辑该模块的配置文件,将 $HTTP_ACCESSKEY_MODULE 修改为 ngx_http_accesskey_module

vi nginx-accesskey-2.0.3/config

下载 Nginx-limit-traffic-rate-module(限速模块)

wget https://github.com/bigplum/Nginx-limit-traffic-rate-module/archive/master.zip
unzip master.zip
rm -f master.zip

下载 Nginx upload module(上传模块)

wget https://github.com/vkholodkov/nginx-upload-module/archive/2.2.zip
unzip 2.2.zip
rm -f 2.2.zip

2. 下载并编译 Nginx

下载 Nginx 源码并解压。

wget http://nginx.org/download/nginx-1.8.0.tar.gz
tar -xzvf nginx-1.8.0.tar.gz
rm -f nginx-1.8.0.tar.gz
cd nginx-1.8.0

配置编译参数。作为静态文件服务器,可以移除不必要的模块以精简体积。

./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --user=www --group=www --without-http_fastcgi_module --without-http_autoindex_module --without-http_ssi_module --without-http_memcached_module --without-http_scgi_module --without-http_uwsgi_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --with-http_stub_status_module --with-http_realip_module --with-threads --add-module=/DLserver/nginx-accesskey-2.0.3 --add-module=/DLserver/Nginx-limit-traffic-rate-module-master --add-module=/DLserver/nginx-upload-module-2.2.0 --with-http_secure_link_module

参数说明:

  • --with-http_realip_module:用于在反向代理场景下获取客户端真实 IP。
  • --with-http_stub_status_module:启用 Nginx 状态监控页面。
  • --with-threads:启用线程池支持,为后续使用异步 I/O (aio threads) 做准备。

执行编译与安装。

make && make install

3. Nginx 目录结构与常用命令

主要目录:

  • 安装目录:/usr/local/nginx
  • 配置文件:/usr/local/nginx/conf/nginx.conf
  • 日志目录:/usr/local/nginx/logs

常用命令:

# 查看编译参数
/usr/local/nginx/sbin/nginx -V

# 启动
/usr/local/nginx/sbin/nginx

# 停止
/usr/local/nginx/sbin/nginx -s stop

# 重新加载配置
/usr/local/nginx/sbin/nginx -s reload

# 查看进程
ps -ef | grep nginx

4. 配置 Nginx 作为下载服务器

编辑 /usr/local/nginx/conf/nginx.conf 文件,以下是一个基础的下载服务器配置示例:

user www www;
worker_processes auto;

events {
    use epoll;
    worker_connections 2048;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;

    # 定义连接数限制区
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    # 定义请求频率限制区(1次/秒)
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

    server {
        listen 8080; # 建议使用非80端口
        server_name your-domain.com; # 替换为你的域名
        charset utf-8;

        location / {
            root   /path/to/your/files; # 替换为文件存储的实际路径
            index  index.html index.htm;

            # 启用防盗链
            accesskey on;
            accesskey_hashmethod md5;
            accesskey_arg "key";
            accesskey_signature "your_secret$remote_addr"; # 替换 your_secret

            # 连接数与请求频率限制
            limit_conn addr 2; # 每个IP最多2个并发连接
            limit_req zone=one burst=5 nodelay;

            # 限速(每个连接128KB/s)
            limit_rate 128k;

            # 优化大文件发送
            sendfile_max_chunk 512k;
            aio threads;
            directio 4m;
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root html;
        }
    }
}

配置要点:

  • worker_processes:通常设置为 CPU 核心数。
  • listen:作为专用下载服务器,建议使用非标准端口(如8080),并在防火墙中关闭不必要的端口。
  • accesskey_signature:其中的 your_secret 需与生成下载链接的应用程序保持一致。
  • 限速参数(limit_ratesendfile_max_chunk 等)可根据服务器带宽和需求调整。

5. 设置开机自启与日志切割

将 Nginx 启动命令加入 rc.local 以实现开机自启。

echo "/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf" >> /etc/rc.local
chmod +x /etc/rc.local

建议配置日志切割(如按天切割),可使用 logrotate 或自行编写脚本。

三、FTP 服务安装与配置(vsftpd)

1. 安装与基础配置

安装 vsftpd。

yum -y install vsftpd
systemctl start vsftpd
systemctl enable vsftpd

编辑主配置文件 /etc/vsftpd/vsftpd.conf,确保以下关键设置:

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO # 与 user_list 文件配合,仅允许列表中的用户
chroot_local_user=YES # 将用户限制在其家目录
allow_writeable_chroot=YES # 允许被限制的用户有写权限

2. 创建 FTP 用户

创建一个专门用于文件上传的系统用户,并指定其家目录为下载服务器的文件根目录。

useradd -d /path/to/your/files -s /sbin/nologin ftpuser
passwd ftpuser

将用户名 ftpuser 添加到允许访问的列表文件中。

echo "ftpuser" >> /etc/vsftpd/user_list

重启 vsftpd 服务使配置生效。

systemctl restart vsftpd

3. 防火墙配置

如果系统启用了防火墙(如 firewalld 或 iptables),需要放行 FTP 端口(默认为21)以及被动模式端口范围。

# 对于 firewalld
firewall-cmd --permanent --add-service=ftp
firewall-cmd --permanent --add-port=30000-31000/tcp # 被动模式端口范围
firewall-cmd --reload

# 或在 vsftpd.conf 中指定被动模式端口范围
pasv_min_port=30000
pasv_max_port=31000

四、安全与优化建议

1. 服务器安全

  • 修改 SSH 端口:避免使用默认的22端口,减少暴力破解风险。
  • 使用密钥登录:禁用 SSH 密码登录,采用密钥对认证。
  • 配置防火墙:严格限制入站端口,仅开放必要的服务端口(如 Nginx 下载端口、FTP 端口、SSH 新端口)。
  • 定期更新:保持系统和软件(如 Nginx、vsftpd)更新到安全版本。

2. Nginx 防盗链与限速

上文配置已启用 accesskey 模块实现防盗链。限速则通过 limit_connlimit_reqlimit_rate 指令组合实现,可有效防止单个用户或 IP 耗尽带宽。

3. 中文文件名支持

若通过 FTP 上传的中文文件名在服务器上显示乱码,通常是因为客户端与服务器编码不一致。可尝试在 vsftpd 配置中强制使用 UTF-8。

# 在 /etc/vsftpd/vsftpd.conf 中添加
utf8_filesystem=YES

五、常见问题排查

1. Nginx 启动报错

  • “Address already in use”:端口被占用。使用 netstat -ntpl 查找占用进程并停止,或修改 Nginx 监听端口。
  • “open() "/usr/local/nginx/nginx.pid" failed”:PID 文件不存在。使用 nginx -c /path/to/nginx.conf 指定配置文件启动。

2. FTP 连接问题

  • 530 Login incorrect:检查 /etc/vsftpd/user_list/etc/vsftpd/ftpusers 文件,确保用户未被拒绝。检查 PAM 配置 /etc/pam.d/vsftpd
  • 被动模式失败:确保防火墙已放行配置的被动模式端口范围(如30000-31000)。

通过以上步骤,你可以搭建一个具备文件上传(FTP)、安全下载(防盗链、限速)、基础监控功能的 Nginx 静态文件下载服务器。请根据实际生产环境的需求,对配置参数进行进一步调优。

发表评论

您的邮箱不会公开。必填项已用 * 标注。