我有一个本地网络,上面有一些旧的不安全服务。我使用带有客户端证书身份验证的nginx反向代理作为从Internet到此本地网络的安全入口点。到目前为止,我只使用它来代理HTTP服务器
location / {
proxy_pass http://192.168.123.45:80/;
}
一切正常。
但是现在我想提供静态文件,这些文件可以通过本地服务器上的FTP访问,我简单地尝试了:
location /foo {
proxy_pass ftp://user:password@192.168.100.200:5000/;
}
但这不起作用,我找不到任何可以简单地将 HTTP 请求代理到 FTP 请求的东西。
有什么办法可以做到这一点吗?
Nginx不支持代理FTP服务器。 充其量,您可以代理套接字...对于常规的旧FTP来说,这是一个真正的麻烦,因为每次请求文件时,它都会在随机端口上打开新连接。
相反,您可以做的是在某个本地路径上为该FTP服务器创建一个FUSE挂载,并像往常一样使用Nginx为该路径提供服务。 为此,CurlFtpFS就是一个工具。 教程:https://linuxconfig.org/mount-remote-ftp-directory-host-locally-into-linux-filesystem
(注意:为了安全性和可靠性,强烈建议您尽可能从 FTP 迁移。 考虑使用 SSH/SFTP
你可以先使用 nfs mount 你需要在 ftp 服务器上安装:Debian11 中的示例
sudo apt-get install nfs-kernel-server
比在/etc/导出上,您可以设置允许将您的目录共享到 ip 服务器
/home/sharedir ip.ip.ip.ip(rw,sync,no_subtree_check,all_squash,anonuid=0,anongid=0)
在 Nginx 服务器上安装
sudo apt-get install nfs-common
并从第一台服务器挂载目录
mount /mnt/myremotesharedir ip.ip.ip.ip:/home/sharedir
现在你可以在nginx路径中使用/home/sharedir作为根或别名
location /foo {
root /home/sharedir/foo;
}