插件窝 干货文章 Linux平台通过nginx和vsftpd构建图片服务器的方法

Linux平台通过nginx和vsftpd构建图片服务器的方法

sudo Nginx vsftpd images 911    来源:    2025-04-26

在Linux平台通过Nginx和vsftpd构建图片服务器

一、系统环境准备

  1. 确保系统为较新版本的Linux发行版(如Ubuntu 20.04+/CentOS 7+)
  2. 更新系统软件包: bash sudo apt update && sudo apt upgrade -y # Ubuntu/Debian # 或 sudo yum update -y # CentOS/RHEL

二、安装和配置vsftpd

1. 安装vsftpd

sudo apt install vsftpd -y  # Ubuntu/Debian
# 或
sudo yum install vsftpd -y  # CentOS/RHEL

2. 配置vsftpd

编辑配置文件 /etc/vsftpd.conf

sudo nano /etc/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_file=/var/log/vsftpd.log
xferlog_std_format=YES
chroot_local_user=YES
allow_writeable_chroot=YES
listen=YES
listen_ipv6=NO
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=50000
user_sub_token=$USER
local_root=/var/www/images/$USER
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO

3. 创建FTP用户和目录

# 创建系统用户(例如imguser)
sudo useradd -m -d /var/www/images/imguser -s /bin/bash imguser
sudo passwd imguser

# 创建用户目录
sudo mkdir -p /var/www/images/imguser
sudo chown imguser:imguser /var/www/images/imguser
sudo chmod 755 /var/www/images/imguser

# 将用户添加到允许列表
echo "imguser" | sudo tee -a /etc/vsftpd.userlist

4. 启动vsftpd服务

sudo systemctl enable vsftpd
sudo systemctl restart vsftpd

三、安装和配置Nginx

1. 安装Nginx

sudo apt install nginx -y  # Ubuntu/Debian
# 或
sudo yum install nginx -y  # CentOS/RHEL

2. 配置Nginx作为图片服务器

创建Nginx配置文件 /etc/nginx/conf.d/images.conf

sudo nano /etc/nginx/conf.d/images.conf

添加以下内容:

server {
    listen 80;
    server_name your-domain.com;  # 替换为你的域名或IP

    location /images/ {
        alias /var/www/images/;
        autoindex on;

        # 图片缓存设置
        expires 30d;
        add_header Cache-Control "public";

        # 允许跨域访问(可选)
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';

        # 图片处理模块(可选)
        image_filter resize 800 600;
        image_filter_jpeg_quality 85;
        image_filter_buffer 10M;
    }

    # 防止目录遍历
    location ~ /\. {
        deny all;
    }
}

3. 测试并重载Nginx配置

sudo nginx -t
sudo systemctl reload nginx

四、安全加固

1. 防火墙设置

# 允许HTTP和FTP端口
sudo ufw allow 80/tcp
sudo ufw allow 21/tcp
sudo ufw allow 40000:50000/tcp  # FTP被动模式端口范围
sudo ufw enable

2. SELinux设置(仅限CentOS/RHEL)

sudo setsebool -P httpd_enable_homedirs on
sudo chcon -R -t httpd_sys_content_t /var/www/images/

3. 限制上传文件类型(可选)

在vsftpd配置中添加:

deny_file={*.exe,*.sh,*.php,*.js}

五、测试和使用

  1. 使用FTP客户端(如FileZilla)连接到服务器,上传图片
  2. 通过浏览器访问:http://your-server-ip/images/imguser/your-image.jpg

六、高级配置(可选)

1. 启用HTTPS

使用Let's Encrypt获取SSL证书:

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your-domain.com

2. 图片缩略图生成

安装ImageMagick:

sudo apt install imagemagick -y

创建缩略图脚本:

#!/bin/bash
for img in /var/www/images/*/*.{jpg,jpeg,png,gif}; do
  if [ ! -f "${img%.*}_thumb.${img##*.}" ]; then
    convert "$img" -resize 200x200 "${img%.*}_thumb.${img##*.}"
  fi
done

3. 监控和日志

设置日志轮转:

sudo nano /etc/logrotate.d/nginx_images

添加:

/var/log/nginx/images.access.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        /usr/sbin/nginx -s reload
    endscript
}

通过以上步骤,您已经成功在Linux平台上使用Nginx和vsftpd构建了一个功能完善的图片服务器。