问题:Nginx和VSFTPD可能都试图使用相同的端口(如21端口) 解决方案:
# 编辑VSFTPD配置文件
sudo nano /etc/vsftpd.conf
# 确保以下设置
listen_port=2121 # 改为非标准FTP端口
pasv_min_port=40000
pasv_max_port=41000
问题:防火墙阻止FTP连接 解决方案:
# 开放FTP端口
sudo ufw allow 2121/tcp
sudo ufw allow 40000:41000/tcp
sudo ufw reload
问题:客户端无法建立数据连接 解决方案:
# 在vsftpd.conf中添加
pasv_enable=YES
pasv_address=your_server_ip # 你的服务器公网IP
pasv_min_port=40000
pasv_max_port=41000
问题:SELinux阻止FTP访问 解决方案:
# 检查SELinux状态
getenforce
# 临时关闭(不推荐)
setenforce 0
# 或设置正确的SELinux策略
sudo setsebool -P ftpd_full_access on
问题:用户无法上传文件 解决方案:
# 确保用户有写权限
sudo chown -R username:username /var/www/html
sudo chmod -R 755 /var/www/html
# 在vsftpd.conf中
local_enable=YES
write_enable=YES
local_umask=022
问题:通过FTP上传的文件Nginx无法访问 解决方案:
# 确保Nginx用户(通常是www-data)有读取权限
sudo usermod -a -G username www-data
sudo chmod -R 775 /var/www/html
/etc/vsftpd.conf
:
listen=YES
listen_port=2121
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO
pasv_enable=YES
pasv_address=your_server_ip
pasv_min_port=40000
pasv_max_port=41000
user_sub_token=$USER
local_root=/var/www/html/$USER
allow_writeable_chroot=YES
sudo systemctl restart vsftpd
sudo systemctl restart nginx
如果问题仍然存在,请检查日志文件获取更多信息:
sudo tail -f /var/log/vsftpd.log
sudo tail -f /var/log/nginx/error.log