PAC & SSH

之前我一直在用 FoxyProxy 来配置 Firefox 的代理功能, FoxyProxy 很强大, 但是有一些问题很麻烦: FoxyProxy 的配置貌似没办法在多台机器之间转移, 太多的鼠标操作(这或许不算是个问题, 但是如果能够通过编辑一个文件来实现同样的功能的话会好很多, 因为纯文本文件很容易被编辑和复制, 并且也很容易放进版本控制系统).

最近发现了 PAC 文件可以完整地取代 FoxyProxy 而且有非常多的优点. PAC 是 proxy auto-config 的缩写, 实质是一段纯文本的 JavaScript, 实现了一个叫做 FindProxyForURL(url, host) 的函数, 这个函数的返回值就是代理服务器的信息. 比如下面这个是我目前在用的 PAC 文件的内容:

function FindProxyForURL(url, host) { if (shExpMatch(url, "*.wikipedia.org/*")) { return "SOCKS 127.0.0.1:7777"; } if (shExpMatch(url, "*.apple.com/*")) { return "SOCKS 127.0.0.1:7777"; } if (shExpMatch(url, "*.tumblr.com/*")) { return "SOCKS 127.0.0.1:7777"; } if (shExpMatch(url, "*.soup.io/*")) { return "SOCKS 127.0.0.1:7777"; } if (shExpMatch(url, "*.pandora.com/*")) { return "SOCKS 127.0.0.1:7777"; } if (shExpMatch(url, "*.last.fm/*")) { return "SOCKS 127.0.0.1:7777"; } if (shExpMatch(url, "*.adobe.com/*")) { return "SOCKS 127.0.0.1:7777"; } if (shExpMatch(url, "*.photoshop.com/*")) { return "SOCKS 127.0.0.1:7777"; } if (shExpMatch(url, "*.google.com/*")) { return "SOCKS 127.0.0.1:7777"; } if (shExpMatch(url, "*.googlecode.com/*")) { return "SOCKS 127.0.0.1:7777"; } if (shExpMatch(url, "*.blogspot.com/*")) { return "SOCKS 127.0.0.1:7777"; } if (shExpMatch(url, "*.appspot.com/*")) { return "SOCKS 127.0.0.1:7777"; } if (shExpMatch(url, "*.acer.com/*")) { return "SOCKS 127.0.0.1:7777"; } if (shExpMatch(url, "*.demonoid.com/*")) { return "SOCKS 127.0.0.1:7777"; } if (shExpMatch(url, "*.alexa.com/*")) { return "SOCKS 127.0.0.1:7777"; } if (shExpMatch(url, "*.wikimedia.org/*")) { return "SOCKS 127.0.0.1:7777"; } if (shExpMatch(url, "*.flickr.com/*")) { return "SOCKS 127.0.0.1:7777"; } if (shExpMatch(url, "*.yahoo.com/*")) { return "SOCKS 127.0.0.1:7777"; } if (shExpMatch(url, "*.zend.com/*")) { return "SOCKS 127.0.0.1:7777"; } if (shExpMatch(url, "*.aptana.com/*")) { return "SOCKS 127.0.0.1:7777"; } if (shExpMatch(url, "*.uncyclopedia.tw/*")) { return "SOCKS 127.0.0.1:7777"; } if (shExpMatch(url, "uncyclopedia.tw/*")) { return "SOCKS 127.0.0.1:7777"; } if (shExpMatch(url, "*.uncyc.org/*")) { return "SOCKS 127.0.0.1:7777"; } if (shExpMatch(url, "*.youtube.com/*")) { return "SOCKS 127.0.0.1:7777"; } if (shExpMatch(url, "*.webarchive.org/*")) { return "SOCKS 127.0.0.1:7777"; } return "DIRECT"; }

这个函数的语法可以看 Netscape 网站上的文档, 你可以在 return 处使用 PROXY 或者 SOCKS 来选择 http 或者 socks 协议的代理, DIRECT 的意思即不使用代理直接连接. PAC 文件被几乎所有的主流浏览器支持, Mac OS X 操作系统的 Network 控制面板中也有对 PAC 文件的支持.

在我本地的配置中, 我是用 ssh 连接到一台美国的高速服务器, 并打开一个 SOCKS 通道的方式实现加密的代理通讯. 你可以在 *nix 操作系统的命令行中运行:

ssh -D 7777 username@remotehost.com

就可以在本地的 7777 端口打开一个 SOCKS 代理. 这种方式除了可以实现无障碍的访问之外, 如果代理服务器足够快, 那么甚至可以用来加速访问, 比如我就用这样的方式加速在 Apple 的网站上看新电影的预告片.

--------------------------------------------------------------
原文: PAC & SSH

0 comments:

Post a Comment