凌峰创科服务平台

nginx如何配置FTP服务器?

Nginx vs. FTP 服务器

非常重要的一点是:Nginx 本身并不是一个完整的 FTP 服务器软件

nginx如何配置FTP服务器?-图1
(图片来源网络,侵删)
  • 传统 FTP 服务器:如 vsftpd, ProFTPD,它们是专门为文件传输而设计的,拥有完整的用户认证、权限管理、日志记录等功能。
  • Nginx 的角色:Nginx 是一个高性能的 Web 服务器和反向代理,它可以通过一个模块 ngx_http_auth_basic_module 来提供基于 HTTP 的基本认证(用户名/密码)。

当我们说 "用 Nginx 配置 FTP 服务器" 时,我们通常指的是以下两种常见架构:

  1. Nginx + pure-ftpd/vsftpd (推荐):Nginx 作为 Web 服务器,提供文件列表和下载功能,运行一个真正的 FTP 服务器(如 pure-ftpd)来处理文件的上传、删除等操作,两者共享用户认证信息。
  2. Nginx + ngx_http_dav_module (仅限 HTTP):利用 Nginx 的 WebDAV 模块,将一个目录暴露为可以通过 Web 浏览器进行文件上传、下载、管理的地址,这看起来像是一个 "Web 文件管理器",而不是标准的 FTP 协议服务。

下面,我将详细介绍这两种配置方法。


Nginx + pure-ftpd (功能最完整、最推荐)

这种方案结合了 Nginx 的 Web 优势和 pure-ftpd 的专业 FTP 功能,用户可以通过浏览器访问文件列表,也可以使用 FTP 客户端进行上传下载。

步骤 1:安装必要软件

以 Ubuntu/Debian 为例:

nginx如何配置FTP服务器?-图2
(图片来源网络,侵删)
# 安装 Nginx
sudo apt update
sudo apt install nginx
# 安装 pure-ftpd,它会自动创建一个系统用户组 'ftpgroup'
sudo apt install pure-ftpd

步骤 2:创建 FTP 用户和目录

我们需要为 FTP 服务创建一个专用的系统用户,并设置其家目录。

# 创建一个名为 'ftpuser' 的用户
# --home 指定家目录
# --shell /usr/sbin/nologin 禁止该用户通过 SSH 登录,仅用于 FTP
sudo useradd -m -d /home/ftpuser -s /usr/sbin/nologin ftpuser
# 为 ftpuser 设置密码
sudo passwd ftpuser

/home/ftpuser FTP 用户的根目录,让我们在里面放一些测试文件。

# 创建一个上传目录
sudo mkdir /home/ftpuser/files
# 将目录所有权给 ftpuser
sudo chown -R ftpuser:ftpuser /home/ftpuser
# 设置正确的权限
sudo chmod -R 755 /home/ftpuser
sudo chmod -R 775 /home/ftpuser/files # 给上传目录写权限
# 放一个测试文件
echo "Hello from Nginx FTP Server!" | sudo tee /home/ftpuser/index.html

步骤 3:配置 pure-ftpd

编辑 pure-ftpd 的配置文件,通常位于 /etc/pure-ftpd/conf/ 目录下。

# 编辑配置文件
sudo nano /etc/pure-ftpd/conf/ChrootEveryone
```修改为 `yes`,这样用户将只能访问其家目录及其子目录,无法“跳出”到其他地方。
```bash
# 编辑配置文件
sudo nano /etc/pure-ftpd/conf/PureDB
```指向用户数据库,默认情况下,它应该是 `/etc/pure-ftpd/pureftpd.passwd`,如果文件不存在,没关系,下一步创建时会自动生成。
#### 步骤 4:将 Nginx 用户和 `pure-ftpd` 用户关联
为了实现用户认证同步,我们需要将 `ftpuser` 的密码信息同步给 Nginx。
1.  **安装 `apache2-utils`** (它包含 `htpasswd` 工具):
    ```bash
    sudo apt install apache2-utils
  1. 创建 Nginx 的密码文件:

    # -c 表示创建新文件,如果文件已存在,请去掉 -c,否则会覆盖。
    # ftpuser 是用户名,后面会提示你输入两次密码(必须和 pure-ftpd 的密码一致)
    sudo htpasswd -c /etc/nginx/.htpasswd ftpuser
  2. 修改密码文件所有者:

    sudo chown www-data:www-data /etc/nginx/.htpasswd
    sudo chmod 640 /etc/nginx/.htpasswd

步骤 5:配置 Nginx

创建一个新的 Nginx 配置文件,用于展示 FTP 用户的文件。

sudo nano /etc/nginx/sites-available/ftp_server
server {
    listen 80;
    server_name your_server_ip; # 替换成你的服务器IP或域名
    # FTP 用户的根目录
    root /home/ftpuser;
    # 开启目录列表
    autoindex on;
    autoindex_exact_size off;
    autoindex_localtime on;
    # --- 关键部分:使用 HTTP 基本认证 ---
    # 这会弹出一个登录框,要求输入用户名和密码
    # 密码文件我们已经在步骤4中创建
    auth_basic "Restricted FTP Area";
    auth_basic_user_file /etc/nginx/.htpasswd;
    # 可选:限制只允许特定 IP 访问,增加安全性
    # allow 192.168.1.0/24; # 允许这个网段
    # deny all;
}

启用这个站点:

# 创建软链接到 sites-enabled
sudo ln -s /etc/nginx/sites-available/ftp_server /etc/nginx/sites-enabled/
# 检查 Nginx 配置语法
sudo nginx -t
# 如果没问题,则重载 Nginx
sudo systemctl reload nginx

步骤 6:启动并测试服务

# 启动 pure-ftpd 服务
sudo systemctl start pure-ftpd
sudo systemctl enable pure-ftpd # 开机自启
# 检查服务状态
sudo systemctl status pure-ftpd

测试

  1. Web 访问测试: 在浏览器中输入 http://your_server_ip,你会看到一个登录框。

    • 用户名: ftpuser
    • 密码: 你为 ftpuser 设置的密码 登录后,你应该能看到 /home/ftpuser 目录下的文件列表,index.htmlfiles 文件夹。
  2. FTP 客户端测试: 使用 FileZilla 或其他 FTP 客户端连接。

    • 主机: your_server_ip
    • 端口: 21 (FTP 默认端口)
    • 用户名: ftpuser
    • 密码: 你为 ftpuser 设置的密码 连接成功后,你应该能看到 /home/ftpuser 目录,并可以上传、下载文件。

Nginx WebDAV (仅限 HTTP,无需额外 FTP 服务)

如果你不需要标准的 FTP 协议,只是想通过 Web 浏览器来管理文件,这个方案更简单。

步骤 1:安装 Nginx

sudo apt update
sudo apt install nginx

步骤 2:创建用户和目录

# 创建一个 WebDAV 用户
sudo useradd -m -d /home/webdavuser -s /usr/sbin/nologin webdavuser
sudo passwd webdavuser
# 创建 WebDAV 共享目录
sudo mkdir -p /var/www/webdav
sudo chown -R webdavuser:www-data /var/www/webdav
sudo chmod -R 775 /var/www/webdav

步骤 3:创建密码文件

sudo htpasswd -c /etc/nginx/.htpasswd webdavuser
sudo chown www-data:www-data /etc/nginx/.htpasswd
sudo chmod 640 /etc/nginx/.htpasswd

步骤 4:配置 Nginx

创建一个新的配置文件:

sudo nano /etc/nginx/sites-available/webdav
server {
    listen 80;
    server_name your_server_ip;
    root /var/www/webdav;
    # WebDAV 相关配置
    dav_methods PUT DELETE MKCOL COPY MOVE;
    dav_ext_methods PROPFIND OPTIONS;
    dav_access user:rw group:r all:r;
    # HTTP 基本认证
    auth_basic "WebDAV Login";
    auth_basic_user_file /etc/nginx/.htpasswd;
    # 错误页面重定向到登录页
    error_page 401 /401.html;
    location = /401.html {
        internal;
        root /var/www/html; # 你需要一个 401.html 文件,或者重定向到登录页
    }
}

启用站点并重载 Nginx:

sudo ln -s /etc/nginx/sites-available/webdav /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

步骤 5:测试

  1. 浏览器访问: 在浏览器输入 http://your_server_ip,会弹出登录框,登录后,你可以通过浏览器的开发者工具或专用 WebDAV 客户端(如 Cyberduck)来上传、下载、创建文件夹。

  2. 使用 cadaver 命令行工具 (Linux/macOS):

    # 安装 cadaver
    sudo apt install cadaver
    # 连接
    cadaver http://your_server_ip
    # 然后输入用户名和密码
    # 在 cadaver 提示符下,可以使用 ls, put, get, mkdir 等命令

总结与对比

特性 方案一 (Nginx + pure-ftpd) 方案二 (Nginx WebDAV)
协议 FTP (21端口) + HTTP (80端口) HTTP/HTTPS (80/443端口)
客户端 任何 FTP 客户端 (FileZilla等) Web 浏览器、WebDAV 客户端
功能 完整的 FTP 功能(上传、下载、删除、重命名) 基本的文件管理(上传、下载、删除、创建目录)
优点 功能强大、标准协议、支持各种客户端 配置简单、无需额外服务、可通过 HTTPS 加密
缺点 需要维护两个服务、端口暴露更多 功能相对简单、依赖 Web 客户端体验
适用场景 需要专业 FTP 服务、大量用户、兼容旧客户端 简单的文件共享、Web 管理后台、临时传输

对于大多数现代应用,方案一 是最健壮和功能最全的选择,如果你只是想在 Web 上快速搞一个文件管理功能,方案二 则足够简单快捷。

分享:
扫描分享到社交APP
上一篇
下一篇