阿里云服务器ECS配置Ngnix、vsftpd
这篇文章用于记录我在个人阿里云服务器ECS上配置Ngnix和vsftpd的过程,用于以后我的个人设备实现OTA升级的功能。
1.Ngnix和vsftpd是什么?
VSFTPD(全称Very Secure FTP Daemon)和Nginx(全称Engine X)都是在服务器环境中广泛使用的软件,但它们的职责截然不同。简单来说,VSFTPD专注于安全的文件传输,而Nginx则是一个高性能的Web服务器和反向代理。
|
特性 |
VSFTPD |
Nginx |
|---|---|---|
|
核心职能 |
FTP文件传输服务器 |
Web服务器、反向代理服务器、负载均衡器 |
|
协议 |
FTP / FTPS |
HTTP / HTTPS、IMAP、POP3、SMTP等 |
|
主要用途 |
文件的上传与下载 |
发布网站、反向代理、负载均衡 |
|
关键特点 |
以安全性和轻量级著称 |
高性能、高并发、低内存占用 |
💻 如何选择与组合使用
-
独立使用场景:如果你只需要一个让用户上传下载文件的服务器,就单独安装配置VSFTPD 。如果你的业务仅仅是提供一个网站(尤其是静态内容)或做请求转发,单独使用Nginx就足够了 。
-
组合使用场景:这是一种非常经典的架构。让两者各司其职,协同工作:
-
文件上传:用户或应用程序通过FTP协议(如使用FileZilla、FtpClient )将文件上传到VSFTPD服务器。
-
文件存储:文件被安全地存储在VSFTPD服务器上。
-
文件访问:Nginx配置为指向VSFTPD的文件存储目录 。当用户通过浏览器访问文件时,Nginx通过HTTP协议高效地将文件提供出去。
这种做法的好处是实现了文件统一管理,并且能防止文件因Tomcat等应用服务器重启而丢失 。由于浏览器主要通过HTTP访问资源,通过Nginx代理,可以方便地通过网页链接分享文件 。
-
执行完上面的命令后,输入:
-
2.安装 Nginx (使用 dnf 命令)
在终端里依次执行以下命令:
-
更新软件源缓存:
codeBashdnf makecache -
安装 Nginx:
codeBashdnf install nginx -y -
启动 Nginx (安装完它不会自动启动,这点和 Ubuntu 不一样):
codeBashsystemctl start nginx -
设置开机自启 (防止重启服务器后服务挂了):
codeBashsystemctl enable nginx - codeBash
systemctl status nginx2.1.验证是否安装成功
codeBash
systemctl status nginx
这是我在服务器执行的结果,显示Nginx已激活

2.2.修改阿里云安全组入规则
Nginx基于HTTP(超文本传输协议实现),HTTP默认端口80,如果我们从外部访问服务器,那么需要在阿里云后台的**“安全组”**打开 80 端口。你需要去阿里云控制台 -> 实例 -> 安全组 -> 添加规则,放行 TCP 80 端口
(AI科普小知识):
80端口的意义:80端口是HTTP(超文本传输协议)的公认标准端口。当你直接在浏览器中输入域名(如 www.example.com)时,浏览器实际上就是在尝试连接服务器的80端口。因此,Nginx 使用80作为默认端口,可以让你在部署网站后,让用户以最简便的方式(无需在网址后加端口号)进行访问
如下图:

然后进入Ngnix生成的网页看看,在浏览器输入公网地址http://你的公网IP。

2.3现在我们来修改nginx.conf
直接vi打开:vi /etc/nginx/nginx.conf。我得配置修改如下:
主要加了:
user root;
root /home/ota_files;
autoindex on;
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user root;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
listen [::]:80;
server_name _;
#root /usr/share/nginx/html;
root /home/ota_files;
autoindex on;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
# Settings for a TLS enabled server.
#
# server {
# listen 443 ssl http2;
# listen [::]:443 ssl http2;
# server_name _;
# root /usr/share/nginx/html;
#
# ssl_certificate "/etc/pki/nginx/server.crt";
# ssl_certificate_key "/etc/pki/nginx/private/server.key";
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 10m;
# ssl_ciphers PROFILE=SYSTEM;
# ssl_prefer_server_ciphers on;
#
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
# error_page 404 /404.html;
# location = /40x.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# }
}
2.4检查并放入文件
确保你的目录存在,且里面有东西:
codeBash
# 1. 确保目录存在
mkdir -p /home/ota_files
# 2. 随便放个文件进去测试 (如果没有固件的话)
echo "Hello OTA" > /home/ota_files/1.txt
# 3. 确保权限开放
chmod -R 777 /home/ota_files
2.5重启 Nginx 并测试
codeBash
systemctl restart nginx
2.6再次打开网页http://你的阿里云公网IP

注意:Nginx 默认配置下,只提供“下载服务”(读),不提供“上传接口”(写)。也就是说设备可以通过HTTP请求来获取升级固件进行OTA升级了,但是不能够向服务器推送日志,我打算让设备具备向服务器推送日志的功能!接下来配置vsftpd。
3.安装vsftpd
3.1安装 vsftpd
在终端执行:
codeBash
dnf install vsftpd -y
systemctl enable vsftpd
3.2创建一个 FTP 用户
为了安全,也为了配合你代码里的 USER 和 PASS,我们需要创建一个专门的用户。
假设你的代码里:用户名是 ftpuser,密码是 123456。
codeBash
# 1. 创建用户,并将他的“家”指定为 Nginx 的那个目录
# -d 指定目录
# -s /sbin/nologin 禁止他 SSH 登录(安全)
useradd -d /home/ota_files -s /sbin/nologin ftpuser
# 2. 设置密码 (输入命令后,盲打输入 123456 并回车两次)
passwd ftpuser
# 3. 修正目录权限 (让 ftpuser 拥有读写权限)
chown -R ftpuser:ftpuser /home/ota_files
chmod -R 755 /home/ota_files
3.3修改 vsftpd 配置文件(核心)
这里是成败的关键。我们需要开启被动模式,并告诉 FTP 服务器“我是阿里云,我有公网 IP”。
-
打开配置文件:
codeBashvim /etc/vsftpd/vsftpd.conf -
清空里面所有内容(或者直接覆盖),粘贴以下配置。
注意:把 pasv_address 改成你自己的公网 IP!
打开配置文件 vi /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=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
# --- 锁定用户目录 (防止他乱跑) ---
chroot_local_user=YES
# 允许写根目录 (新版vsftpd安全限制)
allow_writeable_chroot=YES
# --- 阿里云专用:被动模式配置 (PASV) ---
pasv_enable=YES
# 【重要】这里填你的阿里云公网 IP
pasv_address=你的阿里云服务器公网IP
# 【重要】指定数据端口范围,一定要去安全组开这些端口
pasv_min_port=30000
pasv_max_port=30010
然后保存退出(:wq),重启服务:systemctl restart vsftpd
设置开启自启动
# 设置 FTP (vsftpd) 开机自启
systemctl enable vsftpd
3.4为vsftpd修改阿里云服务器入规则
因为 FTP 协议需要的端口(21 和 30000-30010)不在阿里云的预设快捷选项里,所以必须手动填写。
3.4.1开放 FTP 命令端口 (21)
-
协议类型:选 自定义 TCP
-
端口范围:填 21/21
-
授权对象:填 0.0.0.0/0 (表示允许所有人连接)
-
描述:可以填 “FTP命令端口”
3.4.2开放 FTP 数据端口 (30000-30010)
(这一步是必须的,否则被动模式会连不上)
-
协议类型:选 自定义 TCP
-
端口范围:填 30000/30010
-
注意:格式是 起始端口/结束端口
-
-
授权对象:填 0.0.0.0/0
-
描述:可以填 “FTP数据端口”
如下图:

3.5在mobaxterm中登陆ftp服务器
在mobxterm中点击session,然后选择FTP,输入公网IP,账户名和端口,点击OK。然后会提示输入密码,密码是在3.2小节中设置好的那个密码123456。如果忘记密码,重置一下密码,在服务器输入命令:passwd ftpuser,然后盲打两次密码,系统会提示successful。


后续设备就可以通过FTP或者Nginx(HTTP),从服务器这个/home/ota_files这个目录下载固件了,也可以通过FTP方式来推送日志到服务器!
更多推荐
所有评论(0)