通过Nginx代理做sftp上传文件方案
时间: 2023-07-18 10:19:22 浏览: 284
通过Nginx代理做SFTP上传文件是一种比较常用的方案,可以提高安全性和灵活性。具体实现步骤如下:
1. 安装OpenSSH和Nginx:
```bash
sudo apt-get install openssh-server nginx
```
2. 配置OpenSSH:
在`/etc/ssh/sshd_config`文件中添加以下内容:
```text
# 允许SFTP上传
Subsystem sftp /usr/lib/openssh/sftp-server
Match group sftp
ChrootDirectory /data/sftp/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
PasswordAuthentication yes
```
在这里,我们配置了SFTP的根目录为`/data/sftp/用户名`,限制了SFTP用户只能使用内置的sftp命令,不能使用ssh登录,同时开启了密码验证。
3. 配置Nginx:
在Nginx的配置文件中添加以下内容:
```nginx
location /upload {
auth_basic "Restricted"; # 开启基本认证
auth_basic_user_file /etc/nginx/.htpasswd; # 认证文件路径
proxy_pass sftp://127.0.0.1:22/; # 代理到本地的SFTP服务
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 配置上传文件大小限制
client_max_body_size 50M;
}
```
在这里,我们通过`proxy_pass`指定了SFTP上传的目标地址为本地的SFTP服务,同时开启了基本认证,并设置了上传文件的大小限制。
4. 创建SFTP用户和认证文件:
```bash
sudo adduser sftpuser # 创建SFTP用户
sudo mkdir -p /data/sftp/sftpuser/upload # 创建上传目录
sudo chown sftpuser:sftp /data/sftp/sftpuser/upload # 设置目录权限
sudo htpasswd -c /etc/nginx/.htpasswd sftpuser # 创建认证文件
```
在这里,我们创建了一个名为`sftpuser`的SFTP用户,并创建了一个上传目录,设置了目录权限,并创建了一个认证文件。
通过以上步骤,我们就可以通过Nginx代理做SFTP上传文件了。用户可以通过SFTP客户端连接到Nginx,并上传文件到指定的上传目录。
阅读全文