©
本文档使用
php.cn手册 发布
说明 |
mod_proxy 的FTP支持模块 |
---|---|
状态 | 扩展(E) |
模块名 | proxy_ftp_module |
源文件 | proxy_ftp.c |
本模块提供了代理FTP站点的能力,它需要mod_proxy
提供的服务。这样,为了能处理FTP代理请求,模块mod_proxy
和mod_proxy_ftp
必须同时存在于服务器中。
注意:目前对FTP的支持仅限于GET方法。
在您没有对您的服务器采取安全措施之前,不要启用代理。开放的代理服务器对你自己的内部网络和大规模的Internet网都是有安全隐患的。
您可能没有在您的代理mime类型配置文件中定义特定的文件类型application/octet-stream
。有用的一行可能是这样的:
application/octet-stream bin dms lha lzh exe class tgz taz
作为另一种选择,你可能希望将所有东西都看成二进制类型:
DefaultType application/octet-stream
在很罕见的情况下,也许您想要用FTP的ASCII
传输模式(默认是binary
模式)来下载某个特定的文件,您可以用在请求前面加上";type=a
"前缀的方式覆盖mod_proxy
的默认值来强制进行ASCII模式的传输。但是不论如何,FTP目录列表将始终以ASCII模式执行。
目前,mod_proxy仅支持FTP的GET方法,因此不支持使用FTP上传。你可以通过Apache代理改用HTTP上传(POST或PUT)。
一个FTP URI一般被当成登录用户home目录的相对路径处理。唉,可惜您不能使用"/../"来到达更上层的目录,因为点(.)由浏览器解释而不会真正发送给FTP服务器。为搞定这个问题,在Apache FTP代理中实现了一个"Squid %2f hack"。这是一个也被其它流行的类似Squid Proxy Cache的代理服务器使用的解决方法。使用预先将"/%2f
"加入您请求路径的方法,您能使代理将FTP起始目录改为"/
"(而不是home目录)。例如,为了取得文件/etc/motd
,您应当使用下面这样的URL :
ftp://user@host/%2f/etc/motd
使用用户名和密码登入一个FTP服务器时,Apache使用了不同的策略。当URL中不存在用户名和密码时,Apache会向FTP服务器发出一个匿名用户的登录,比如说:
user: anonymous
password: apache_proxy@
这对于配置了匿名访问的大多数FTP服务器来说是很有效的。
要使用特定的用户名,可以将这个特定的用户名嵌入URL中:
ftp://username@host/myfile
如果在给出了这个用户名后,FTP服务器要求提供一个密码(这是它应该做的),这时Apache会回应一个"401
"(需要认证)应答,这将会使浏览器弹出一个用户名/密码对话框。当输入了密码后,将会再次尝试连接,如果成功,则请求的资源就会被下载。这种方法的好处在于您的浏览器不会以明码的形式显示密码,而当您使用
ftp://username:password@host/myfile
的时候就无法做到这一点。
这种方法提交的密码在传输的时候没有进行加密。它在您的浏览器到Apache代理服务器之间传输时为base64格式的明文字符串,而在Apache代理服务器和FTP服务器之间传输的为普通文本。所以,在通过HTTP访问您的FTP服务器之前(或通过FTP访问您的私人文件之前)您应该慎重考虑一下。当使用这种不安全的手段时,一个窃听者可能会用这种方法截取您的密码。