使用 NGINX 从 FTP 服务器服务器静态文件



我有一个本地网络,上面有一些旧的不安全服务。我使用带有客户端证书身份验证的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;
}

最新更新