代理服务器的设置
在某些特别的情况下,我们需要设置代理服务器实现上网的目的,本文主要介绍代理服务器的设置系统代理服务器设置Win10系统提供系统级代理服务器设置,通过在Win10系统中设置代理服务器,系统中所有的软件都会通过我们设置的代理服务器访问网络,这样就不用一个一个软件设置代理服务器了,包括浏览器等应用,都会使用设定的系统代理服务器上网。Win10系统「网络和Internet」,在网络设置中,点击「代理」选项
在某些特别的情况下,我们需要设置代理服务器实现上网的目的,本文主要介绍代理服务器的设置
系统代理服务器设置
Win10系统提供系统级代理服务器设置,通过在Win10系统中设置代理服务器,系统中所有的软件都会通过我们设置的代理服务器访问网络,这样就不用一个一个软件设置代理服务器了,包括浏览器等应用,都会使用设定的系统代理服务器上网。
Win10系统「网络和Internet」,在网络设置中,点击「代理」选项,即可设置系统级的代理服务器。
系统中代理有两种设置
- 手动设置代理是全局代理,所有的流量都会走代理服务器
- 自动设置代理是自动代理,根据规则决定是否使用代理。设置自动代理可以实现智能分流,多个代理服务器同时使用。
浏览器的代理服务器设置
更多时候,我们不会做全局的代理服务器设置,因为这样所有的软件都会用我们设定的代理服务器连接网络,更多时候,我们需要某个软件使用代理服务器上网,比如浏览器使用某个代理服务器上网。IE浏览器的代理服务器设置和系统级的代理服务器设置效果是一样的,设置了IE浏览器代理服务器之后,系统的代理服务器也被设置为一样。
但有时候在浏览器中也不希望所有网站流量都走代理,比如希望国内网站不走代理,国外网站走代理,这时也是需要自动代理的。
实现自动代理的方案:
- 在浏览器中可以使用 SwitchyOmega 等插件,安装 Privoxy 实现动态代理。
- 在系统配置PAC自动代理脚本,优点是跨平台,无需安装第三方软件或插件,几乎所有的系统都支持。
使用浏览器插件 SwitchyOmega 实现浏览器自动代理
下面两篇文章已非常详细,故不再赘述。
chrome浏览器插件SwitchyOmega的安装(离线安装)
SwitchyOmega插件的使用
使用系统自动代理
1、编写自动代理脚本文件
代理自动配置(PAC)文件是一个 JavaScript 脚本,
其核心是一个 JavaScript 函数,用来决定网页浏览请求(HTTP、HTTPS,和 FTP)应当直连目标地址,还是被转发给一个网页代理服务器并通过代理连接。
PAC 文件中的核心 JavaScript 函数通常是这样定义的:
/**
* @url google.comURL中类似https://这样的的路径和查询组件已被去除
* @host 从URL中提取得到的主机名,端口号不包括在此参数中
*/
function FindProxyForURL(url, host) {
//
}
自动配置文件应当被保存为一个以.pac
作为文件拓展名的文件,比如:
proxy.pac
2、设置代理自动配置文件(PAC)
把PAC上传到http服务器,或者放本地,在系统设置网络中找到自动代理配置,填上PAC的访问地址即可。
3、示例代码
以下示例都是完整的,使用时不需要增加任何其它代码,直接保存应用即可。
例 1 对除本地主机以外的所有连接使用代理
这是只有一个代理服务器情况下最简单高效的自动配置脚本。
function FindProxyForURL(url, host) {
// 当主机名中没有域名时或主机名与第二个参数匹配时为真
if (isPlainHostName(host) || dnsDomainIs(host, ".mozilla.org")) {
return "DIRECT";
} else {
return "PROXY w3proxy.mozilla.org:8080; DIRECT";
}
}
例 2 对防火墙外的本地服务器使用代理
如果有主机(例如生产环境中的 Web 服务器)属于本地域但在防火墙外,仅可通过代理访问,可以通过 localHostOrDomainIs() 来为上述主机添加例外:
function FindProxyForURL(url, host) {
if (
// 当主机名中没有域名时或主机名与第二个参数匹配时为真
(isPlainHostName(host) || dnsDomainIs(host, ".mozilla.org")) &&
// 且完整域名匹配或主机名(host)匹配时返回true。
!localHostOrDomainIs(host, "www.mozilla.org") &&
// 且完整域名匹配或主机名(host)匹配时返回true。
!localHostOrDoaminIs(host, "merchant.mozilla.org")
) {
return "DIRECT";
} else {
return "PROXY w3proxy.mozilla.org:8080; DIRECT";
}
}
例 3 如果无法解析域名,则使用代理
这个示例可用于网络中的DNS服务器只解析内部主机名的情况,其功能是只对不能成功解析的域名使用代理。
function FindProxyForURL(url, host) {
// 尝试解析主机名。如果成功,则返回true。
if (isResolvable(host)) {
return "DIRECT";
} else {
return "PROXY proxy.mydomain.com:8080";
}
}
例 4 基于网域(Subnet)的选择方案
在此示例中,所有同一子网内的主机均直接连接,其他主机则通过代理连接:
function FindProxyForURL(url, host) {
// 一个 DNS 主机名,或者一个 IP 地址。如果传入了主机名,则会被此函数解析为 IP 地址,再进行判断。
if (isInNet(host, "198.95.0.0", "255.255.0.0")) {
return "DIRECT";
} else {
return "PROXY proxy.mydomain.com:8080";
}
}
例 5 负载均衡 / 基于 URL 模式(pattern)的路由规划
这个例子更复杂,有四 (4) 个代理服务器,其中第四个是备用代理,如果其余三个中的任何一个出现故障,第四个将接管。
注意主代理与备用代理是通过 + 号连接的。
function FindProxyForURL(url, host) {
if (isPlainHostName(host) || dnsDomainIs(host, ".mydomain.com"))
return "DIRECT";
// 如果字符串(host)匹配指定表达式(*.com)则返回true。
else if (shExpMatch(host, "*.com"))
return "PROXY proxy1.mydomain.com:8080; " +
"PROXY proxy4.mydomain.com:8080";
else if (shExpMatch(host, "*.edu"))
return "PROXY proxy2.mydomain.com:8080; " +
"PROXY proxy4.mydomain.com:8080";
else
return "PROXY proxy3.mydomain.com:8080; " +
"PROXY proxy4.mydomain.com:8080";
}
例 6 为不同协议设置不同代理
大多数 JavaScript 标准功能在 FindProxyForURL() 中可用。
作为例子,我们通过startsWith() 为不同的协议设置不同的代理。
function FindProxyForURL(url, host) {
if (url.startsWith("http:"))
return "PROXY http-proxy.mydomain.com:8080";
else if (url.startsWith("ftp:"))
return "PROXY ftp-proxy.mydomain.com:8080";
else if (url.startsWith("gopher:"))
return "PROXY gopher-proxy.mydomain.com:8080";
else if (url.startsWith("https:") || url.startsWith("snews:"))
return "PROXY security-proxy.mydomain.com:8080";
else
return "DIRECT";
}
参考资料:
代理自动配置(PAC)文件
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)