设置改完了,客户端上线路也显示可用,顺手打开模拟器里的应用一查,报出来的还是原来那个IP。第一反应多半是配置没生效,于是又改一遍,结果仍然一样。实际的情形常常相反,改动本身没有问题,只是还没有被读到:代理线路的设置分散在几处不同的位置,谁先读、谁后读、什么时候读一次,决定了这次改动要在哪一刻才真正起作用。
设置放在哪几处,各自什么时候读一次
从改动落笔的地方到应用真正走出去,中间隔着两三层。代理设置每层的读取时机不一样,改动生效的快慢也就跟着不同。
| 哪一层 | 改动什么时候被读到 | 要不要重启 |
|---|---|---|
| 宿主系统层 | 实例下一次走网络初始化时读取,已经在跑的实例不会自动更新 | 实例需要重新启动 |
| 实例网络层 | 窗口建立新连接时按当前设置走,已建立的连接继续用旧配置 | 不必重启,等旧连接断开 |
| 应用自身层 | 应用启动时读一次,运行期间一般不再回头看 | 应用整个退出再进 |
系统层的改动要等实例重新初始化
在宿主系统里改代理设置,影响的只是之后启动的实例。已经开着的那几个窗口,网络初始化早就走完了,设置放在那里也不会被重新读一次。这时候去查IP,看到的仍然是启动那一刻的状态,很容易被当成改动失败。稳妥的做法是改完把相关实例重启一遍,再查一次。
实例层的改动等旧连接断开
在实例里改代理相关的设置,新连接会按新的走,但已经建好的那条连接不会因为设置变了就断开。所以刚改完的一两分钟里,查出来的结果可能是旧的。判断的办法很简单:等一会儿再查一次,或者把发起请求的应用退出重进,让连接重新建立。
应用层的读取最容易被忽略
有的应用只在启动那一刻读一次系统设置,之后运行多久都不再回头。
碰到这类应用,改了设置却还在走旧IP,属于正常现象。判断的办法是先把它彻底退出,再从最近任务里划掉,重新打开,设置才会被读进去。如果退出重进之后结果依然没变,那才需要往配置本身去查,比如代理地址填错、线路已经失效这一类可能。
- 先确认系统层设置已保存 改完把页面退一次再进,确认填的内容还在
- 再启动或重启实例 已经在跑的先关掉,重新打开,让它走一遍网络初始化
- 等实例完全进桌面 启动过程中不要急着打开应用,网络还没准备好
- 打开应用后再查IP 用能回显地址的页面查一次,和预期的那条对一对
- 结果不对先看顺序 回头检查是不是有哪一层没有重新读取,别急着改配置
把顺序理顺之后,这类改了没反应的情况会少很多。多数时候,配置本身是写对的,只是还没轮到某一层去读它。按系统层、实例、应用这个顺序一路走下来,每一步都确认到位,再去看IP,结果才说明问题。
改动能不能生效,看的是顺序有没有走对,跟改过的次数没有关系。
