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

mic*_*sna 4 ftp nginx

我有一个本地网络,上面有一些旧的不安全服务。我使用带有客户端证书身份验证的 nginx 反向代理作为从 Internet 到此本地网络的安全入口点。直到现在我只使用它来代理 HTTP 服务器

    location / {
        proxy_pass http://192.168.123.45:80/;
    }
Run Code Online (Sandbox Code Playgroud)

一切正常。

但是现在我想提供可以通过本地服务器上的 FTP 访问的静态文件,我只是尝试:

    location /foo {
        proxy_pass ftp://user:password@192.168.100.200:5000/;
    }
Run Code Online (Sandbox Code Playgroud)

但这不起作用,我找不到任何可以简单地将 HTTP 请求代理到 FTP 请求的东西。

有没有办法做到这一点?

Bra*_*rad 6

Nginx 不支持代理到 FTP 服务器。充其量,您可以代理套接字......这对于常规的旧 FTP 来说是一个真正的麻烦,因为每次请求文件时它都会在随机端口上打开新连接。

您可能可以做的是在某个本地路径上为该 FTP 服务器创建一个 FUSE 挂载,并像往常一样使用 Nginx 为该路径提供服务。为此,CurlFtpFS是一个工具。教程:https : //linuxconfig.org/mount-remote-ftp-directory-host-locally-into-linux-filesystem

(注意:为了安全和可靠性,强烈建议您尽可能从 FTP 迁移。考虑使用SSH/SFTP。)

  • @HasanAlsawadi 任何真正关心性能的人一开始都不会做这种代理。另外,我对你的说法提出质疑。通过 SSH 执行此操作,只需要一个 TCP 连接,而使用 FTP 则为每次传输创建一个单独的连接。加密的开销几乎不是什么,并且通常被卸载到硬件上。 (2认同)