Apache模块 mod_proxy_ftp

说明 mod_proxy的FTP支持模块
状态 扩展(E)
模块名 proxy_ftp_module
源文件 proxy_ftp.c

概述

本模块提供了代理FTP站点的能力,它需要mod_proxy提供的服务。这样,为了能处理FTP代理请求,模块mod_proxymod_proxy_ftp必须同时存在于服务器中。

注意:目前对FTP的支持仅限于GET方法。

警告

在您没有对您的服务器采取安全措施之前,不要启用代理。开放的代理服务器对你自己的内部网络和大规模的Internet网都是有安全隐患的。

为什么xxx类型的文件不能从FTP下载?

您可能没有在您的代理mime类型配置文件中定义特定的文件类型application/octet-stream 。有用的一行可能是这样的:

application/octet-stream   bin dms lha lzh exe class tgz taz

作为另一种选择,你可能希望将所有东西都看成二进制类型:

DefaultType application/octet-stream

如何强制文件xxx使用FTP的ASCII形式下载?

在很罕见的情况下,也许您想要用FTP的ASCII传输模式(默认是binary模式)来下载某个特定的文件,您可以用在请求前面加上";type=a"前缀的方式覆盖mod_proxy的默认值来强制进行ASCII模式的传输。但是不论如何,FTP目录列表将始终以ASCII模式执行。

我如何使用FTP上传?

目前,mod_proxy仅支持FTP的GET方法,因此不支持使用FTP上传。你可以通过Apache代理改用HTTP上传(POST或PUT)。

我如何能访问我自己home目录以外的FTP文件?

一个FTP URI一般被当成登录用户home目录的相对路径处理。唉,可惜您不能使用"/../"来到达更上层的目录,因为点(.)由浏览器解释而不会真正发送给FTP服务器。为搞定这个问题,在Apache FTP代理中实现了一个"<dfn class="calibre27">Squid %2f hack</dfn>"。这是一个也被其它流行的类似Squid Proxy Cache的代理服务器使用的解决方法。使用预先将"/%2f"加入您请求路径的方法,您能使代理将FTP起始目录改为"/"(而不是home目录)。例如,为了取得文件/etc/motd ,您应当使用下面这样的URL :

        ftp://<var class="calibre40">user</var>@<var class="calibre40">host</var>/%2f/etc/motd

我如何才能在浏览器的URL框中隐藏FTP的明文密码?

使用用户名和密码登入一个FTP服务器时,Apache使用了不同的策略。当URL中不存在用户名和密码时,Apache会向FTP服务器发出一个匿名用户的登录,比如说:

        user: anonymous

        password: apache_proxy@

这对于配置了匿名访问的大多数FTP服务器来说是很有效的。

要使用特定的用户名,可以将这个特定的用户名嵌入URL中:

        ftp://<var class="calibre40">username</var>@<var class="calibre40">host</var>/myfile

如果在给出了这个用户名后,FTP服务器要求提供一个密码(这是它应该做的),这时Apache会回应一个"401"(需要认证)应答,这将会使浏览器弹出一个用户名/密码对话框。当输入了密码后,将会再次尝试连接,如果成功,则请求的资源就会被下载。这种方法的好处在于您的浏览器不会以明码的形式显示密码,而当您使用

        ftp://<var class="calibre40">username</var>:<var class="calibre40">password</var>@<var class="calibre40">host</var>/myfile

的时候就无法做到这一点。

注意

这种方法提交的密码在传输的时候没有进行加密。它在您的浏览器到Apache代理服务器之间传输时为base64格式的明文字符串,而在Apache代理服务器和FTP服务器之间传输的为普通文本。所以,在通过HTTP访问您的FTP服务器之前(或通过FTP访问您的私人文件之前)您应该慎重考虑一下。当使用这种不安全的手段时,一个窃听者可能会用这种方法截取您的密码。